[tbb] 19/64: Imported Upstream version 2.2+r013

Graham Inggs ginggs at moszumanska.debian.org
Mon Jul 3 12:27:45 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 ebf5104e7133cf4d498a171f23d47896e9e65256
Author: Graham Inggs <ginggs at debian.org>
Date:   Mon Jul 3 14:13:36 2017 +0200

    Imported Upstream version 2.2+r013
---
 CHANGES                                            |   49 +
 Makefile                                           |    2 +-
 build/FreeBSD.gcc.inc                              |    2 +-
 build/FreeBSD.inc                                  |    2 +-
 build/Makefile.rml                                 |   36 +-
 build/Makefile.tbb                                 |   10 +-
 build/Makefile.tbbmalloc                           |   23 +-
 build/Makefile.test                                |   26 +-
 build/SunOS.gcc.inc                                |    3 +-
 build/SunOS.inc                                    |   11 +-
 build/SunOS.suncc.inc                              |    2 +-
 build/common.inc                                   |   11 +-
 build/common_rules.inc                             |    9 +-
 build/detect.js                                    |    2 +-
 build/generate_tbbvars.bat                         |    2 +-
 build/generate_tbbvars.sh                          |    2 +-
 build/index.html                                   |    2 +-
 build/linux.gcc.inc                                |    4 +-
 build/linux.icc.inc                                |    6 +-
 build/linux.inc                                    |    2 +-
 .../seismic/Makefile => build/lrb.host.inc         |   52 +-
 build/lrb.inc                                      |   90 +
 build/lrb.native.inc                               |  100 ++
 build/macos.gcc.inc                                |    3 +-
 build/macos.icc.inc                                |    2 +-
 build/macos.inc                                    |    4 +-
 build/test_launcher.bat                            |    2 +-
 build/test_launcher.sh                             |    2 +-
 build/version_info_linux.sh                        |    2 +-
 build/version_info_macos.sh                        |    2 +-
 build/version_info_sunos.sh                        |    2 +-
 build/version_info_windows.js                      |    2 +-
 build/vsproject/index.html                         |    2 +-
 build/vsproject/makefile.sln                       |   28 +
 build/vsproject/tbb.vcproj                         |  290 +++-
 build/vsproject/tbbmalloc.vcproj                   |  260 ++-
 build/vsproject/tbbmalloc_proxy.vcproj             |  110 +-
 build/windows.cl.inc                               |   13 +-
 build/windows.gcc.inc                              |    2 +-
 build/windows.icl.inc                              |   18 +-
 build/windows.inc                                  |    4 +-
 doc/Release_Notes.txt                              |   23 +-
 doc/html/a00001.html                               |    6 +-
 doc/html/a00002.html                               |    6 +-
 doc/html/a00003.html                               |    6 +-
 doc/html/a00004.html                               |   28 +-
 doc/html/a00005.html                               |   20 +-
 doc/html/a00006.html                               |   24 +-
 doc/html/a00007.html                               |   36 +-
 doc/html/a00009.html                               |    8 +-
 doc/html/a00011.html                               |   22 +-
 doc/html/a00012.html                               |   67 +-
 doc/html/a00013.html                               |   93 -
 doc/html/{a00015.html => a00014.html}              |   12 +-
 doc/html/a00015.html                               |   16 +-
 doc/html/a00016.html                               |   18 +-
 doc/html/a00017.html                               |   32 +-
 doc/html/a00018.html                               |   52 +-
 doc/html/a00019.html                               |   59 -
 doc/html/{a00021.html => a00020.html}              |   74 +-
 doc/html/a00021.html                               |  108 +-
 doc/html/a00022.html                               |  102 --
 doc/html/{a00025.html => a00026.html}              |   70 +-
 doc/html/a00029.html                               |   41 -
 doc/html/a00030.html                               |   18 +-
 doc/html/a00031.html                               |   13 +-
 doc/html/a00032.html                               |   12 +-
 doc/html/a00033.html                               |   12 +-
 doc/html/a00034.html                               |   14 +-
 doc/html/a00035.html                               |   12 +-
 doc/html/a00036.html                               |    5 +-
 doc/html/a00037.html                               |    4 +-
 doc/html/a00038.html                               |    8 +-
 doc/html/a00039.html                               |   11 +-
 doc/html/{a00039.html => a00040.html}              |   10 +-
 doc/html/{a00041.html => a00042.html}              |   10 +-
 doc/html/a00043.html                               |   38 -
 doc/html/a00044.html                               |   25 +-
 doc/html/a00045.html                               |   41 +-
 doc/html/a00046.html                               |   35 +-
 doc/html/a00047.html                               |   19 +-
 doc/html/a00048.html                               |   14 +-
 doc/html/a00049.html                               |   15 +-
 doc/html/a00050.html                               |   17 +-
 doc/html/a00051.html                               |   19 +-
 doc/html/a00052.html                               |   18 +-
 doc/html/a00053.html                               |   26 +-
 doc/html/{a00053.html => a00054.html}              |   36 +-
 doc/html/{a00055.html => a00056.html}              |    8 +-
 doc/html/a00057.html                               |   41 -
 doc/html/a00058.html                               |   18 +-
 doc/html/a00059.html                               |   19 +-
 doc/html/a00060.html                               |   20 +-
 doc/html/a00061.html                               |   27 +-
 doc/html/{a00061.html => a00062.html}              |   36 +-
 doc/html/a00063.html                               |   86 -
 doc/html/a00064.html                               |  108 +-
 doc/html/a00065.html                               |   61 +-
 doc/html/{a00065.html => a00066.html}              |   16 +-
 doc/html/a00073.html                               |   20 +-
 doc/html/a00075.html                               |   44 +-
 doc/html/a00077.html                               |    8 +-
 doc/html/a00079.html                               |   26 +-
 doc/html/a00081.html                               |   10 +-
 doc/html/a00083.html                               |    6 +-
 doc/html/a00084.html                               |    9 +-
 doc/html/a00085.html                               |   15 +-
 doc/html/a00086.html                               |   16 +-
 doc/html/a00087.html                               |   13 +-
 doc/html/a00088.html                               |   18 +-
 doc/html/{a00086.html => a00089.html}              |   28 +-
 doc/html/{a00087.html => a00090.html}              |   12 +-
 doc/html/{a00088.html => a00091.html}              |   10 +-
 doc/html/a00095.html                               |   33 -
 doc/html/a00098.html                               |    6 +-
 doc/html/{a00098.html => a00101.html}              |    8 +-
 doc/html/{a00099.html => a00102.html}              |   20 +-
 doc/html/a00115.html                               |   62 -
 doc/html/a00116.html                               |   63 -
 doc/html/a00117.html                               |   61 -
 doc/html/a00118.html                               |   56 -
 doc/html/a00119.html                               |   59 -
 doc/html/a00120.html                               |   32 +-
 doc/html/a00121.html                               |   31 +-
 doc/html/a00122.html                               |  197 +--
 doc/html/a00123.html                               |   58 +-
 doc/html/a00124.html                               |   66 +-
 doc/html/a00125.html                               |   86 +-
 doc/html/a00126.html                               |   53 +-
 doc/html/a00127.html                               |  176 +-
 doc/html/a00128.html                               |   70 +-
 doc/html/a00129.html                               |  288 +--
 doc/html/a00130.html                               |  597 +------
 doc/html/a00131.html                               |   42 +-
 doc/html/a00132.html                               |  133 +-
 doc/html/a00132.png                                |  Bin 0 -> 472 bytes
 doc/html/a00133.html                               |   74 +-
 doc/html/a00134.html                               |  267 ++-
 doc/html/a00134.png                                |  Bin 0 -> 731 bytes
 doc/html/a00135.html                               |  601 ++++++-
 doc/html/a00136.html                               |  574 +-----
 doc/html/a00136.png                                |  Bin 0 -> 1172 bytes
 doc/html/a00137.html                               |   41 +-
 doc/html/a00138.html                               |  175 +-
 doc/html/a00138.png                                |  Bin 0 -> 1172 bytes
 doc/html/a00139.html                               |  222 +--
 doc/html/a00140.html                               |  127 +-
 doc/html/a00140.png                                |  Bin 0 -> 720 bytes
 doc/html/a00141.html                               |  550 +++++-
 doc/html/a00142.html                               |   81 +-
 doc/html/a00142.png                                |  Bin 0 -> 387 bytes
 doc/html/a00143.html                               |  189 +-
 doc/html/a00144.html                               |  185 +-
 doc/html/a00144.png                                |  Bin 0 -> 433 bytes
 doc/html/a00145.html                               |   34 +-
 doc/html/a00146.html                               |   35 +-
 doc/html/a00147.html                               |   33 +-
 doc/html/a00148.html                               |   33 +-
 doc/html/a00149.html                               |  151 +-
 doc/html/a00149.png                                |  Bin 0 -> 604 bytes
 doc/html/a00150.html                               |   85 +-
 doc/html/a00151.html                               |   74 +-
 doc/html/a00152.html                               |   42 +-
 doc/html/a00153.html                               |   86 +-
 doc/html/a00154.html                               |   46 +-
 doc/html/a00155.html                               |  126 +-
 doc/html/a00156.html                               |   82 +-
 doc/html/a00157.html                               |  125 +-
 doc/html/a00158.html                               |  116 +-
 doc/html/a00159.html                               |   38 +-
 doc/html/a00160.html                               |   49 +-
 doc/html/a00161.html                               |   82 +-
 doc/html/a00162.html                               |   80 +-
 doc/html/a00163.html                               |  124 +-
 doc/html/a00164.html                               |  126 +-
 doc/html/a00165.html                               |   48 +-
 doc/html/a00166.html                               |  594 +------
 doc/html/a00167.html                               |  208 +--
 doc/html/a00168.html                               |   54 +-
 doc/html/a00169.html                               |  131 +-
 doc/html/a00170.html                               |  129 +-
 doc/html/a00171.html                               |  106 +-
 doc/html/a00172.html                               |  129 +-
 doc/html/a00173.html                               |   60 +-
 doc/html/a00174.html                               |  579 +++++-
 doc/html/a00174.png                                |  Bin 0 -> 393 bytes
 doc/html/a00175.html                               |  183 +-
 doc/html/a00176.html                               |   58 +-
 doc/html/a00177.html                               |  149 +-
 doc/html/a00178.html                               |  103 +-
 doc/html/a00179.html                               |   62 +-
 doc/html/a00180.html                               |  146 +-
 doc/html/a00180.png                                |  Bin 0 -> 894 bytes
 doc/html/{a00173.html => a00181.html}              |   18 +-
 doc/html/{a00175.html => a00182.html}              |   23 +-
 doc/html/a00182.png                                |  Bin 0 -> 426 bytes
 doc/html/{a00176.html => a00183.html}              |   20 +-
 doc/html/{a00177.html => a00184.html}              |   26 +-
 doc/html/{a00178.html => a00185.html}              |    8 +-
 doc/html/{a00179.html => a00186.html}              |   12 +-
 doc/html/{a00180.html => a00187.html}              |    8 +-
 doc/html/{a00210.html => a00218.html}              |   30 +-
 doc/html/a00229.html                               |  694 --------
 doc/html/a00237.html                               |  667 ++++++-
 doc/html/a00239.html                               |  903 ----------
 doc/html/{a00232.html => a00240.html}              |   14 +-
 doc/html/{a00233.html => a00241.html}              |  218 +--
 doc/html/{a00234.html => a00242.html}              |   24 +-
 doc/html/{a00235.html => a00243.html}              |   54 +-
 doc/html/{a00236.html => a00244.html}              |   36 +-
 doc/html/{a00237.html => a00245.html}              |    4 +-
 doc/html/{a00238.html => a00246.html}              |   20 +-
 doc/html/a00247.html                               |  921 ++++++++++
 doc/html/a00258.html                               |  401 -----
 doc/html/{a00255.html => a00263.html}              |   85 +-
 doc/html/{a00257.html => a00265.html}              |    8 +-
 doc/html/a00266.html                               |  428 ++++-
 doc/html/a00272.html                               | 1143 ------------
 doc/html/{a00266.html => a00274.html}              |   40 +-
 doc/html/{a00267.html => a00275.html}              |   38 +-
 doc/html/{a00268.html => a00276.html}              |   54 +-
 doc/html/{a00269.html => a00277.html}              |   28 +-
 doc/html/{a00271.html => a00279.html}              |   28 +-
 doc/html/a00280.html                               | 1265 ++++++++++++++
 doc/html/a00282.html                               |  361 ----
 doc/html/a00292.html                               | 1119 ++++--------
 doc/html/{a00283.html => a00293.html}              | 1486 ++++++++--------
 doc/html/a00300.html                               |  238 ---
 doc/html/a00302.html                               |  148 +-
 doc/html/a00304.html                               |  480 -----
 doc/html/{a00292.html => a00305.html}              |  110 +-
 doc/html/a00313.html                               |  367 ++--
 doc/html/{a00302.html => a00315.html}              |   22 +-
 doc/html/{a00303.html => a00316.html}              |   22 +-
 doc/html/a00317.html                               |  474 ++++-
 doc/html/a00325.html                               |  360 ----
 doc/html/a00326.html                               |  234 +++
 doc/html/a00329.html                               |  341 ----
 doc/html/{a00317.html => a00330.html}              |   34 +-
 doc/html/{a00319.html => a00332.html}              |  340 ++--
 doc/html/a00334.html                               |  225 ---
 doc/html/a00338.html                               |  448 +++--
 doc/html/a00342.html                               |  465 +++--
 doc/html/a00347.html                               |  356 ++--
 doc/html/a00350.html                               |  247 ---
 doc/html/a00351.html                               |  293 ++--
 doc/html/a00354.html                               |  611 -------
 doc/html/{a00342.html => a00355.html}              |   38 +-
 doc/html/{a00347.html => a00360.html}              |   86 +-
 doc/html/{a00348.html => a00361.html}              |   32 +-
 doc/html/{a00349.html => a00362.html}              |   40 +-
 doc/html/a00363.html                               |  391 +++--
 doc/html/{a00351.html => a00364.html}              |   50 +-
 doc/html/{a00352.html => a00365.html}              |   62 +-
 doc/html/{a00353.html => a00366.html}              |   74 +-
 doc/html/a00367.html                               |  609 +++++++
 doc/html/a00374.html                               |   90 -
 doc/html/a00376.html                               |  266 +++
 doc/html/a00379.html                               |  160 --
 doc/html/a00381.html                               |  262 ---
 doc/html/{a00371.html => a00383.html}              |   26 +-
 doc/html/{a00372.html => a00384.html}              |    2 +-
 doc/html/a00386.html                               |  224 +--
 doc/html/{a00375.html => a00387.html}              |   44 +-
 doc/html/a00391.html                               |  362 ++--
 doc/html/{a00380.html => a00392.html}              |   23 +-
 doc/html/a00393.html                               |  300 ++++
 doc/html/{a00382.html => a00394.html}              |  980 +++++------
 doc/html/{a00385.html => a00397.html}              |    2 +-
 doc/html/{a00386.html => a00398.html}              |   14 +-
 doc/html/{a00391.html => a00403.html}              |  251 +--
 doc/html/{a00399.html => a00411.html}              |    2 +-
 doc/html/{a00401.html => a00413.html}              |   54 +-
 doc/html/annotated.html                            |  134 +-
 doc/html/deprecated.html                           |    4 +-
 doc/html/doxygen.png                               |  Bin 0 -> 1281 bytes
 doc/html/files.html                                |   95 +-
 doc/html/functions.html                            |  389 +++--
 doc/html/functions_enum.html                       |    6 +-
 doc/html/functions_eval.html                       |   20 +-
 doc/html/functions_func.html                       |  335 ++--
 doc/html/functions_rela.html                       |    4 +-
 doc/html/functions_type.html                       |   20 +-
 doc/html/functions_vars.html                       |    6 +-
 doc/html/globals.html                              |   18 +-
 doc/html/globals_func.html                         |   18 +-
 doc/html/graph_legend.html                         |   87 -
 doc/html/hierarchy.html                            |  136 +-
 doc/html/modules.html                              |   12 +-
 doc/html/namespacemembers.html                     |   38 +-
 doc/html/namespacemembers_enum.html                |    4 +-
 doc/html/namespacemembers_eval.html                |    6 +-
 doc/html/namespacemembers_func.html                |   24 +-
 doc/html/namespacemembers_type.html                |    2 +-
 doc/html/namespacemembers_vars.html                |    2 +-
 doc/html/namespaces.html                           |    4 +-
 examples/GettingStarted/index.html                 |    2 +-
 examples/GettingStarted/sub_string_finder/Makefile |    2 +-
 .../sub_string_finder/Makefile.windows             |    2 +-
 .../GettingStarted/sub_string_finder/index.html    |    2 +-
 .../sub_string_finder/sub_string_finder.cpp        |    2 +-
 .../sub_string_finder_extended.cpp                 |    2 +-
 .../sub_string_finder/sub_string_finder_pretty.cpp |    2 +-
 .../sub_string_finder.xcodeproj/project.pbxproj    |   34 +-
 examples/Makefile                                  |    2 +-
 examples/common/gui/Makefile.gmake                 |    2 +-
 examples/common/gui/Makefile.win                   |    2 +-
 examples/common/gui/convideo.cpp                   |    2 +-
 examples/common/gui/ddvideo.cpp                    |    2 +-
 examples/common/gui/dxcheck.bat                    |    2 +-
 examples/common/gui/gdivideo.cpp                   |    2 +-
 examples/common/gui/macvideo.cpp                   |    4 +-
 examples/common/gui/video.h                        |    4 +-
 examples/common/gui/winvideo.h                     |    2 +-
 examples/common/gui/xvideo.cpp                     |    2 +-
 examples/common/index.html                         |    2 +-
 .../concurrent_hash_map/count_strings/Makefile     |    2 +-
 .../count_strings/Makefile.windows                 |    2 +-
 .../count_strings/count_strings.cpp                |    3 +-
 .../concurrent_hash_map/count_strings/index.html   |    2 +-
 .../xcode/count_strings.xcodeproj/project.pbxproj  |   18 +-
 examples/concurrent_hash_map/index.html            |    2 +-
 examples/index.html                                |    4 +-
 examples/parallel_do/index.html                    |    2 +-
 examples/parallel_do/parallel_preorder/Graph.cpp   |    2 +-
 examples/parallel_do/parallel_preorder/Graph.h     |    6 +-
 examples/parallel_do/parallel_preorder/Makefile    |    2 +-
 .../parallel_do/parallel_preorder/Makefile.windows |    2 +-
 examples/parallel_do/parallel_preorder/Matrix.h    |    2 +-
 examples/parallel_do/parallel_preorder/index.html  |    2 +-
 .../parallel_preorder/parallel_preorder.cpp        |    8 +-
 .../parallel_preorder.xcodeproj/project.pbxproj    |   24 +-
 examples/parallel_for/game_of_life.NET/Makefile    |    2 +-
 .../parallel_for/game_of_life.NET/Makefile.windows |    2 +-
 examples/parallel_for/game_of_life.NET/index.html  |    2 +-
 .../game_of_life.NET/src/AssemblyInfo.cpp          |    2 +-
 examples/parallel_for/game_of_life.NET/src/Board.h |    2 +-
 .../game_of_life.NET/src/Evolution.cpp             |    2 +-
 .../parallel_for/game_of_life.NET/src/Evolution.h  |    2 +-
 examples/parallel_for/game_of_life.NET/src/Form1.h |    2 +-
 .../game_of_life.NET/src/Game_of_life.cpp          |    2 +-
 .../game_of_life.NET/src/Update_state.cpp          |    2 +-
 examples/parallel_for/index.html                   |    2 +-
 examples/parallel_for/polygon_overlay/Makefile     |    2 +-
 .../parallel_for/polygon_overlay/Makefile.windows  |    2 +-
 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 +-
 .../xcode/PolygonOverlay.xcodeproj/project.pbxproj |  616 +++----
 examples/parallel_for/seismic/Makefile             |    2 +-
 examples/parallel_for/seismic/Makefile.windows     |    2 +-
 .../parallel_for/seismic/SeismicSimulation.cpp     |    2 +-
 examples/parallel_for/seismic/index.html           |    2 +-
 .../SeismicSimulation.xcodeproj/project.pbxproj    |  568 +++---
 examples/parallel_for/tachyon/Makefile             |    4 +-
 examples/parallel_for/tachyon/Makefile.windows     |    2 +-
 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 +-
 .../xcode/tachyon.xcodeproj/project.pbxproj        | 1836 ++++++++++----------
 examples/parallel_reduce/convex_hull/Makefile      |    2 +-
 .../parallel_reduce/convex_hull/Makefile.windows   |    2 +-
 examples/parallel_reduce/convex_hull/convex_hull.h |    2 +-
 .../convex_hull/convex_hull_bench.cpp              |    2 +-
 .../convex_hull/convex_hull_sample.cpp             |    2 +-
 examples/parallel_reduce/convex_hull/index.html    |    2 +-
 .../xcode/convex_hull.xcodeproj/project.pbxproj    |   26 +-
 examples/parallel_reduce/index.html                |    2 +-
 examples/parallel_reduce/primes/Makefile           |    2 +-
 examples/parallel_reduce/primes/Makefile.windows   |    2 +-
 examples/parallel_reduce/primes/index.html         |    2 +-
 examples/parallel_reduce/primes/primes.cpp         |    2 +-
 .../primes/xcode/primes.xcodeproj/project.pbxproj  |   18 +-
 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 |    2 +-
 .../parallel_preorder/Makefile.windows             |    2 +-
 examples/parallel_while/parallel_preorder/Matrix.h |    2 +-
 .../parallel_while/parallel_preorder/index.html    |    2 +-
 .../parallel_preorder/parallel_preorder.cpp        |    2 +-
 .../parallel_preorder.xcodeproj/project.pbxproj    |   24 +-
 examples/pipeline/index.html                       |    2 +-
 examples/pipeline/square/Makefile                  |    2 +-
 examples/pipeline/square/Makefile.windows          |    2 +-
 examples/pipeline/square/gen_input.cpp             |    2 +-
 examples/pipeline/square/index.html                |    2 +-
 examples/pipeline/square/square.cpp                |   11 +-
 examples/pipeline/square/vc8/square.vcproj         |    8 +-
 examples/pipeline/square/vc8/square.vcproj.user    |   37 +
 examples/pipeline/square/vc9/square.vcproj         |    8 +-
 examples/pipeline/square/vc9/square.vcproj.user    |   37 +
 .../square/xcode/square.xcodeproj/project.pbxproj  |   24 +-
 examples/pipeline/text_filter/Makefile             |    2 +-
 examples/pipeline/text_filter/Makefile.windows     |    2 +-
 examples/pipeline/text_filter/index.html           |    4 +-
 examples/pipeline/text_filter/text_filter.cpp      |    5 +-
 .../xcode/text_filter.xcodeproj/project.pbxproj    |   18 +-
 examples/task/index.html                           |    2 +-
 examples/task/tree_sum/Makefile                    |    2 +-
 examples/task/tree_sum/Makefile.windows            |    2 +-
 .../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 +-
 .../xcode/tree_sum.xcodeproj/project.pbxproj       |   21 +-
 examples/test_all/fibonacci/Fibonacci.cpp          |    2 +-
 examples/test_all/fibonacci/Makefile               |    2 +-
 examples/test_all/fibonacci/Makefile.windows       |    2 +-
 examples/test_all/fibonacci/index.html             |    2 +-
 .../xcode/fibonacci.xcodeproj/project.pbxproj      |   22 +-
 examples/test_all/index.html                       |    2 +-
 include/index.html                                 |    2 +-
 include/tbb/_concurrent_queue_internal.h           |   70 +-
 include/tbb/_tbb_windef.h                          |    5 +-
 include/tbb/aligned_space.h                        |    2 +-
 include/tbb/atomic.h                               |    2 +-
 include/tbb/blocked_range.h                        |    4 +-
 include/tbb/blocked_range2d.h                      |    2 +-
 include/tbb/blocked_range3d.h                      |    2 +-
 include/tbb/cache_aligned_allocator.h              |    4 +-
 include/tbb/combinable.h                           |    2 +-
 include/tbb/compat/ppl.h                           |    8 +-
 include/tbb/concurrent_hash_map.h                  |  225 ++-
 include/tbb/concurrent_queue.h                     |    8 +-
 include/tbb/concurrent_vector.h                    |   13 +-
 include/tbb/critical_section.h                     |  141 ++
 include/tbb/enumerable_thread_specific.h           |    2 +-
 include/tbb/index.html                             |    2 +-
 include/tbb/machine/ibm_aix51.h                    |    2 +-
 include/tbb/machine/linux_common.h                 |    2 +-
 include/tbb/machine/linux_ia32.h                   |    2 +-
 include/tbb/machine/linux_ia64.h                   |    2 +-
 include/tbb/machine/linux_intel64.h                |    2 +-
 include/tbb/machine/mac_ppc.h                      |    2 +-
 include/tbb/machine/sunos_sparc.h                  |  233 +++
 include/tbb/machine/windows_ia32.h                 |    2 +-
 include/tbb/machine/windows_intel64.h              |    2 +-
 include/tbb/mutex.h                                |    2 +-
 include/tbb/null_mutex.h                           |    2 +-
 include/tbb/null_rw_mutex.h                        |    2 +-
 include/tbb/parallel_do.h                          |    2 +-
 include/tbb/parallel_for.h                         |   11 +-
 include/tbb/parallel_for_each.h                    |   12 +-
 include/tbb/parallel_invoke.h                      |  112 +-
 include/tbb/parallel_reduce.h                      |    6 +-
 include/tbb/parallel_scan.h                        |    2 +-
 include/tbb/parallel_sort.h                        |    2 +-
 include/tbb/parallel_while.h                       |    2 +-
 include/tbb/partitioner.h                          |    2 +-
 include/tbb/pipeline.h                             |    2 +-
 include/tbb/queuing_mutex.h                        |    2 +-
 include/tbb/queuing_rw_mutex.h                     |    2 +-
 include/tbb/recursive_mutex.h                      |    2 +-
 include/tbb/scalable_allocator.h                   |    4 +-
 include/tbb/spin_mutex.h                           |    2 +-
 include/tbb/spin_rw_mutex.h                        |    2 +-
 include/tbb/task.h                                 |   13 +-
 include/tbb/task_group.h                           |   46 +-
 include/tbb/task_scheduler_init.h                  |    2 +-
 include/tbb/task_scheduler_observer.h              |    2 +-
 include/tbb/tbb.h                                  |    3 +-
 include/tbb/tbb_allocator.h                        |    4 +-
 include/tbb/tbb_config.h                           |    2 +-
 include/tbb/tbb_exception.h                        |   59 +-
 include/tbb/tbb_machine.h                          |    4 +-
 include/tbb/tbb_profiling.h                        |    2 +-
 include/tbb/tbb_stddef.h                           |    4 +-
 include/tbb/tbb_thread.h                           |    3 +-
 include/tbb/tbbmalloc_proxy.h                      |    2 +-
 include/tbb/tick_count.h                           |    2 +-
 index.html                                         |    2 +-
 src/Makefile                                       |    4 +-
 src/index.html                                     |    2 +-
 src/old/concurrent_queue_v2.cpp                    |    6 +-
 src/old/concurrent_queue_v2.h                      |    2 +-
 src/old/concurrent_vector_v2.cpp                   |    2 +-
 src/old/concurrent_vector_v2.h                     |    2 +-
 src/old/spin_rw_mutex_v2.cpp                       |    2 +-
 src/old/spin_rw_mutex_v2.h                         |    2 +-
 src/old/test_concurrent_queue_v2.cpp               |   11 +-
 src/old/test_concurrent_vector_v2.cpp              |   11 +-
 src/old/test_mutex_v2.cpp                          |   26 +-
 src/perf/fibonacci_cutoff.cpp                      |    2 +-
 src/perf/fibonacci_impl_tbb.cpp                    |    4 +-
 src/perf/perf_util.h                               |    2 +-
 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_hash_map_fill.cpp                    |    2 +-
 src/perf/time_locked_work.cpp                      |    2 +-
 src/perf/time_sandbox.h                            |    2 +-
 src/perf/time_unit.cpp                             |    2 +-
 src/perf/time_vector.cpp                           |    2 +-
 src/rml/client/index.html                          |    2 +-
 src/rml/client/library_assert.h                    |    2 +-
 src/rml/client/omp_dynamic_link.cpp                |    2 +-
 src/rml/client/omp_dynamic_link.h                  |    2 +-
 src/rml/client/rml_factory.h                       |   15 +-
 src/rml/client/rml_omp.cpp                         |    2 +-
 src/rml/client/rml_tbb.cpp                         |    2 +-
 src/rml/include/index.html                         |    2 +-
 src/rml/include/rml_base.h                         |    2 +-
 src/rml/include/rml_omp.h                          |    2 +-
 src/rml/include/rml_tbb.h                          |    2 +-
 src/rml/index.html                                 |    2 +-
 src/rml/perfor/omp_nested.cpp                      |   61 +-
 src/rml/perfor/omp_simple.cpp                      |   33 +-
 src/rml/perfor/tbb_multi_omp.cpp                   |   58 +-
 src/rml/perfor/tbb_simple.cpp                      |   54 +-
 src/rml/perfor/thread_level.h                      |    8 +-
 src/rml/server/index.html                          |    2 +-
 src/rml/server/irml.rc                             |    6 +-
 src/rml/server/job_automaton.h                     |    2 +-
 src/rml/server/lin-rml-export.def                  |    2 +-
 src/rml/server/rml_server.cpp                      |  100 +-
 src/rml/server/thread_monitor.h                    |   18 +-
 src/rml/server/wait_counter.h                      |    2 +-
 src/rml/server/win32-rml-export.def                |    2 +-
 src/rml/server/win64-rml-export.def                |    2 +-
 src/rml/test/rml_omp_stub.cpp                      |    7 +-
 src/rml/test/test_job_automaton.cpp                |   11 +-
 src/rml/test/test_rml_mixed.cpp                    |   15 +-
 src/rml/test/test_rml_omp.cpp                      |   25 +-
 src/rml/test/test_rml_omp_c_linkage.c              |    5 +-
 src/rml/test/test_rml_tbb.cpp                      |   21 +-
 src/rml/test/test_server.h                         |   28 +-
 src/rml/test/test_thread_monitor.cpp               |   27 +-
 src/tbb/cache_aligned_allocator.cpp                |   21 +-
 src/tbb/concurrent_hash_map.cpp                    |    2 +-
 src/tbb/concurrent_queue.cpp                       |   21 +-
 src/tbb/concurrent_vector.cpp                      |  218 +--
 .../tbb/critical_section.cpp                       |   19 +-
 src/tbb/dynamic_link.cpp                           |    3 +-
 src/tbb/dynamic_link.h                             |    2 +-
 src/tbb/enumerable_thread_specific.cpp             |    2 +-
 src/tbb/ia32-masm/atomic_support.asm               |    2 +-
 src/tbb/ia32-masm/lock_byte.asm                    |    2 +-
 src/tbb/ia64-gas/atomic_support.s                  |    2 +-
 src/tbb/ia64-gas/ia64_misc.s                       |    2 +-
 src/tbb/ia64-gas/lock_byte.s                       |    2 +-
 src/tbb/ia64-gas/log2.s                            |    2 +-
 src/tbb/ia64-gas/pause.s                           |    2 +-
 src/tbb/ibm_aix51/atomic_support.c                 |    2 +-
 src/tbb/index.html                                 |    2 +-
 src/tbb/intel64-masm/atomic_support.asm            |    2 +-
 src/tbb/itt_notify.cpp                             |    2 +-
 src/tbb/itt_notify.h                               |    4 +-
 src/tbb/itt_notify_proxy.c                         |    2 +-
 src/tbb/lin32-tbb-export.def                       |   32 +-
 src/tbb/lin64-tbb-export.def                       |   32 +-
 src/tbb/lin64ipf-tbb-export.def                    |   32 +-
 src/tbb/mac32-tbb-export.def                       |   55 +-
 src/tbb/mac64-tbb-export.def                       |   53 +-
 src/tbb/mutex.cpp                                  |    2 +-
 src/tbb/pipeline.cpp                               |   14 +-
 src/tbb/private_server.cpp                         |    2 +-
 src/tbb/queuing_mutex.cpp                          |    2 +-
 src/tbb/queuing_rw_mutex.cpp                       |    2 +-
 src/tbb/recursive_mutex.cpp                        |    2 +-
 src/tbb/spin_mutex.cpp                             |    2 +-
 src/tbb/spin_rw_mutex.cpp                          |    2 +-
 src/tbb/task.cpp                                   |  380 ++--
 src/tbb/tbb_assert_impl.h                          |    2 +-
 src/tbb/tbb_misc.cpp                               |   37 +-
 src/tbb/tbb_misc.h                                 |    2 +-
 src/tbb/tbb_resource.rc                            |    4 +-
 src/tbb/tbb_thread.cpp                             |    9 +-
 src/tbb/tbb_version.h                              |    2 +-
 src/tbb/tls.h                                      |    2 +-
 src/tbb/tools_api/_config.h                        |    2 +-
 src/tbb/tools_api/_disable_warnings.h              |    2 +-
 src/tbb/tools_api/_ittnotify_static.h              |    2 +-
 src/tbb/tools_api/ittnotify.h                      |    2 +-
 src/tbb/tools_api/ittnotify_static.c               |    2 +-
 src/tbb/win32-tbb-export.def                       |   14 +-
 src/tbb/win64-tbb-export.def                       |   16 +-
 src/tbbmalloc/Customize.h                          |    2 +-
 src/tbbmalloc/{LifoQueue.h => LifoList.h}          |   31 +-
 src/tbbmalloc/MapMemory.h                          |    2 +-
 src/tbbmalloc/MemoryAllocator.cpp                  |  618 +++++--
 src/tbbmalloc/Statistics.h                         |    2 +-
 src/tbbmalloc/TypeDefinitions.h                    |    3 +-
 src/tbbmalloc/lin-tbbmalloc-export.def             |    2 +-
 src/tbbmalloc/lin32-proxy-export.def               |    2 +-
 src/tbbmalloc/lin64-proxy-export.def               |    2 +-
 src/tbbmalloc/lin64ipf-proxy-export.def            |    2 +-
 src/tbbmalloc/mac32-tbbmalloc-export.def           |    2 +-
 src/tbbmalloc/mac64-tbbmalloc-export.def           |    2 +-
 src/tbbmalloc/proxy.cpp                            |   49 +-
 src/tbbmalloc/proxy.h                              |    2 +-
 src/tbbmalloc/tbb_function_replacement.cpp         |  156 +-
 src/tbbmalloc/tbb_function_replacement.h           |    6 +-
 src/tbbmalloc/tbbmalloc.cpp                        |   42 +-
 src/tbbmalloc/tbbmalloc.rc                         |    4 +-
 src/tbbmalloc/win-gcc-tbbmalloc-export.def         |    2 +-
 src/tbbmalloc/win32-tbbmalloc-export.def           |    2 +-
 src/tbbmalloc/win64-tbbmalloc-export.def           |    2 +-
 src/test/harness.h                                 |   89 +-
 src/test/harness_allocator.h                       |    2 +-
 src/test/harness_assert.h                          |    2 +-
 src/test/harness_bad_expr.h                        |    2 +-
 src/test/harness_barrier.h                         |    2 +-
 src/test/harness_concurrency_tracker.h             |    2 +-
 src/test/harness_cpu.h                             |   13 +-
 src/test/harness_eh.h                              |   11 +-
 src/test/harness_iterator.h                        |    2 +-
 src/test/harness_lrb.h                             |  175 +-
 src/test/harness_lrb_host.cpp                      |  188 +-
 src/test/harness_m128.h                            |   47 +-
 src/test/harness_memory.h                          |    7 +-
 src/test/harness_report.h                          |    2 +-
 src/test/test_ScalableAllocator.cpp                |    9 +-
 src/test/test_ScalableAllocator_STL.cpp            |    8 +-
 src/test/test_aligned_space.cpp                    |    8 +-
 src/test/test_allocator.h                          |    2 +-
 src/test/test_allocator_STL.h                      |    2 +-
 src/test/test_assembly.cpp                         |   18 +-
 src/test/test_atomic.cpp                           |    9 +-
 src/test/test_blocked_range.cpp                    |    9 +-
 src/test/test_blocked_range2d.cpp                  |    9 +-
 src/test/test_blocked_range3d.cpp                  |   31 +-
 src/test/test_cache_aligned_allocator.cpp          |   10 +-
 src/test/test_cache_aligned_allocator_STL.cpp      |    8 +-
 src/test/test_combinable.cpp                       |   19 +-
 src/test/test_compiler.cpp                         |   58 +-
 src/test/test_concurrent_hash_map.cpp              |   53 +-
 src/test/test_concurrent_queue.cpp                 |   76 +-
 src/test/test_concurrent_vector.cpp                |   15 +-
 src/test/test_critical_section.cpp                 |  225 +++
 src/test/test_eh_algorithms.cpp                    |   19 +-
 src/test/test_eh_tasks.cpp                         |   21 +-
 src/test/test_enumerable_thread_specific.cpp       |   60 +-
 src/test/test_halt.cpp                             |   15 +-
 src/test/test_handle_perror.cpp                    |   11 +-
 src/test/test_inits_loop.cpp                       |   14 +-
 src/test/test_ittnotify.cpp                        |   13 +-
 src/test/test_lambda.cpp                           |   15 +-
 src/test/test_malloc_compliance.cpp                |   99 +-
 src/test/test_malloc_lib_unload.cpp                |  134 ++
 src/test/test_malloc_overload.cpp                  |   26 +-
 src/test/test_malloc_pure_c.c                      |    2 +-
 src/test/test_malloc_regression.cpp                |   18 +-
 src/test/test_malloc_whitebox.cpp                  |  119 +-
 src/test/test_model_plugin.cpp                     |   31 +-
 src/test/test_mutex.cpp                            |   14 +-
 src/test/test_mutex_native_threads.cpp             |    9 +-
 src/test/test_openmp.cpp                           |   11 +-
 src/test/test_parallel_do.cpp                      |   11 +-
 src/test/test_parallel_for.cpp                     |   48 +-
 src/test/test_parallel_for_each.cpp                |   27 +-
 src/test/test_parallel_invoke.cpp                  |   94 +-
 src/test/test_parallel_reduce.cpp                  |   11 +-
 src/test/test_parallel_scan.cpp                    |   11 +-
 src/test/test_parallel_sort.cpp                    |    9 +-
 src/test/test_parallel_while.cpp                   |    9 +-
 src/test/test_pipeline.cpp                         |   11 +-
 src/test/test_pipeline_with_tbf.cpp                |   11 +-
 src/test/test_rwm_upgrade_downgrade.cpp            |    9 +-
 src/test/test_task.cpp                             |   10 +-
 src/test/test_task_assertions.cpp                  |   12 +-
 src/test/test_task_auto_init.cpp                   |   44 +-
 src/test/test_task_group.cpp                       |   85 +-
 src/test/test_task_leaks.cpp                       |   18 +-
 src/test/test_task_scheduler_init.cpp              |   11 +-
 src/test/test_task_scheduler_observer.cpp          |   14 +-
 src/test/test_tbb_header.cpp                       |   27 +-
 src/test/test_tbb_thread.cpp                       |   16 +-
 src/test/test_tbb_version.cpp                      |    9 +-
 src/test/test_tick_count.cpp                       |   10 +-
 src/test/test_user_events.cpp                      |   13 +-
 src/test/test_yield.cpp                            |   11 +-
 758 files changed, 22347 insertions(+), 21939 deletions(-)

diff --git a/CHANGES b/CHANGES
index e6c71a9..837445a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,52 @@
+TBB 2.2 Update 3 commercial-aligned release
+
+Changes (w.r.t. TBB 2.2 Update 2 commercial-aligned release):
+
+- PDF documentation updated.
+
+Bugs fixed: 
+
+- concurrent_hash_map compatibility issue exposed on Linux in case
+    two versions of the container were used by different modules.
+- enforce 16 byte stack alignment for consistence with GCC; required 
+    to work correctly with 128-bit variables processed by SSE.
+- construct() methods of allocator classes now use global operator new.
+
+------------------------------------------------------------------------
+TBB 2.2 Update 2 commercial-aligned release
+
+Changes (w.r.t. TBB 2.2 Update 1 commercial-aligned release):
+
+- parallel_invoke and parallel_for_each now take function objects
+    by const reference, not by value.
+- Building TBB with /MT is supported, to avoid dependency on particular
+    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT 
+    are located in vc_mt directory.
+- Class critical_section introduced.
+- Improvements in exception support: new exception classes introduced,
+    all exceptions are thrown via an out-of-line internal method.
+- Improvements and fixes in the TBB allocator and malloc replacement,
+    including robust memory identification, and more reliable dynamic
+    function substitution on Windows*.
+- Method swap() added to class tbb_thread.
+- Methods rehash() and bucket_count() added to concurrent_hash_map.
+- Added support for Visual Studio* 2010 Beta2. No special binaries 
+    provided, but CRT-independent DLLs (vc_mt) should work.
+- Other fixes and improvements in code, tests, examples, and docs.
+
+Open-source contributions integrated:
+
+- The fix to build 32-bit TBB on Mac OS X* 10.6.
+- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of
+    earlier work by Raf Schietekat.
+
+Bugs fixed: 
+
+- 159 - TBB build for PowerPC* running Mac OS X*.
+- 160 - IBM* Java segfault if used with TBB allocator.
+- crash in concurrent_queue<char> (1616).
+
+------------------------------------------------------------------------
 TBB 2.2 Update 1 commercial-aligned release
 
 Changes (w.r.t. TBB 2.2 commercial-aligned release):
diff --git a/Makefile b/Makefile
index ceac272..cb2560f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 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 3004535..7c65a71 100644
--- a/build/FreeBSD.gcc.inc
+++ b/build/FreeBSD.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 82b3daa..38ada5c 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/Makefile.rml b/build/Makefile.rml
index 1ef95c4..a02c70b 100644
--- a/build/Makefile.rml
+++ b/build/Makefile.rml
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -26,6 +26,7 @@
 
 tbb_root ?= $(TBB22_INSTALL_DIR)
 BUILDING_PHASE=1
+TEST_RESOURCE = $(TBB.RES)
 include $(tbb_root)/build/common.inc
 DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
 
@@ -36,7 +37,7 @@ RML_ROOT ?= $(tbb_root)/src/rml
 RML_SERVER_ROOT = $(RML_ROOT)/server
 
 VPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)
-VPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test
+VPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test $(tbb_root)/src/test
 
 include $(tbb_root)/build/common_rules.inc
 
@@ -60,11 +61,10 @@ RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
 endif
 
 RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) tbb_misc_rml.$(OBJ)
-TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ)
+TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)
 TBB_DEP_RML_TEST= $(RML_ASM.OBJ)
 ifeq ($(cfg),debug)
 RML_TBB_DEP+= spin_mutex_rml.$(OBJ) 
-TBB_DEP_NON_RML_TEST+= tbb_misc_rml.$(OBJ) 
 TBB_DEP_RML_TEST+= tbb_misc_rml.$(OBJ) 
 endif
 LIBS += $(LIBDL)
@@ -120,34 +120,34 @@ rml: $(RML.DLL) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
 add_debug=$(basename $(1))_debug$(suffix $(1))
 cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
 
-RML_TESTS = test_job_automaton.exe test_thread_monitor.exe test_rml_tbb.exe test_rml_omp.exe test_rml_mixed.exe test_rml_omp_c_linkage.exe
+RML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT) test_rml_tbb.$(TEST_EXT) test_rml_omp.$(TEST_EXT) test_rml_mixed.$(TEST_EXT) test_rml_omp_c_linkage.$(TEST_EXT)
 
-test_rml_tbb.exe: test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+test_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
 
-test_rml_omp.exe: test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)
+test_rml_omp.$(TEST_EXT): test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS) 
 
-test_rml_mixed.exe: test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+test_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS) 
 
 rml_omp_stub.$(OBJ): rml_omp_stub.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $<
 
-test_rml_omp_c_linkage.exe: test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ)
-	$(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ)
+test_rml_omp_c_linkage.$(TEST_EXT): test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ)
+	$(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) $(LIBS) $(LINK_FLAGS)
 
-test_%.exe: test_%.$(OBJ) $(TBB_DEP_NON_RML_TEST)
+test_%.$(TEST_EXT): test_%.$(OBJ) $(TBB_DEP_NON_RML_TEST)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
 
 ### run_cmd is usually empty
-rml_test: $(call cross_suffix,$(RML.DLL)) $(RML_TESTS)
-	$(run_cmd) ./test_job_automaton.exe
-	$(run_cmd) ./test_thread_monitor.exe
-	$(run_cmd) ./test_rml_tbb.exe
-	$(run_cmd) ./test_rml_omp.exe
-	$(run_cmd) ./test_rml_mixed.exe
-	$(run_cmd) ./test_rml_omp_c_linkage.exe
+rml_test: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS)
+	$(run_cmd) ./test_job_automaton.$(TEST_EXT)
+	$(run_cmd) ./test_thread_monitor.$(TEST_EXT)
+	$(run_cmd) ./test_rml_tbb.$(TEST_EXT)
+	$(run_cmd) ./test_rml_omp.$(TEST_EXT)
+	$(run_cmd) ./test_rml_mixed.$(TEST_EXT)
+	$(run_cmd) ./test_rml_omp_c_linkage.$(TEST_EXT)
 
 #------------------------------------------------------
 # End of rules for making the TBBMalloc unit tests
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
index 9f74840..d83c42a 100644
--- a/build/Makefile.tbb
+++ b/build/Makefile.tbb
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -70,6 +70,7 @@ TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
 		queuing_rw_mutex.$(OBJ) \
 		spin_rw_mutex.$(OBJ) \
 		spin_mutex.$(OBJ) \
+		critical_section.$(OBJ) \
 		task.$(OBJ) \
 		tbb_misc.$(OBJ) \
 		mutex.$(OBJ) \
@@ -99,14 +100,17 @@ include $(tbb_root)/build/common_rules.inc
 
 ifneq (,$(TBB.DEF))
 tbb.def: $(TBB.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(TBB.DEF) $(INCLUDES) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbb.def 2>$(NUL) || exit 0"
+	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(TBB.DEF) $(INCLUDES) $(CPLUS_FLAGS) >tbb.def 2>$(NUL) || exit 0"
 
 LIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def
 $(TBB.DLL): tbb.def
 endif
 
+tbbvars.sh:
+	$(MAKE_TBBVARS)
+
 $(TBB.DLL): BUILDING_LIBRARY = $(TBB.DLL)
-$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars $(TBB_NO_VERSION.DLL)
+$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars.sh $(TBB_NO_VERSION.DLL)
 	$(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(TBB.DLL) $(TBB.OBJ) $(TBB.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
 
 ifneq (,$(TBB_NO_VERSION.DLL))
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index a6470f8..6663ae8 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -80,7 +80,7 @@ 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"
+	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOC.DEF) $(CPLUS_FLAGS) >tbbmalloc.def 2>$(NUL) || exit 0"
 
 MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
 $(MALLOC.DLL): tbbmalloc.def
@@ -92,7 +92,7 @@ $(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
 
 ifneq (,$(MALLOCPROXY.DEF))
 tbbmallocproxy.def: $(MALLOCPROXY.DEF)
-	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOCPROXY.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbbmallocproxy.def 2>$(NUL) || exit 0"
+	$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOCPROXY.DEF) $(CPLUS_FLAGS) >tbbmallocproxy.def 2>$(NUL) || exit 0"
 
 PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def
 $(MALLOCPROXY.DLL): tbbmallocproxy.def
@@ -145,13 +145,16 @@ ifeq (windows.gcc,$(tbb_os).$(compiler))
 test_malloc_overload.$(TEST_EXT): LIBS += $(MALLOC_PROXY_LIB)
 endif
 
-test_malloc_overload.$(TEST_EXT): test_malloc_overload.$(OBJ)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
-test_malloc_overload_proxy.$(TEST_EXT): test_malloc_overload.$(OBJ) $(MALLOC_PROXY_LIB)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(MALLOC_PROXY_LIB) $(LIBS) $(LINK_FLAGS)
+test_malloc_overload.$(TEST_EXT): test_malloc_overload.cpp
+	$(CPLUS) $(OUTPUT_KEY)$@ $(subst /MT,/MD,$(M_CPLUS_FLAGS)) $(M_INCLUDES) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
+test_malloc_overload_proxy.$(TEST_EXT): test_malloc_overload.cpp $(MALLOC_PROXY_LIB)
+	$(CPLUS) $(OUTPUT_KEY)$@ $(subst /MT,/MD,$(M_CPLUS_FLAGS)) $(M_INCLUDES) $< $(LIBDL) $(MALLOC_PROXY_LIB) $(LIBS) $(LINK_FLAGS)
 
 test_malloc_whitebox.$(TEST_EXT): test_malloc_whitebox.cpp $(MALLOC_ASM.OBJ) tbb_misc_malloc.$(OBJ)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $^ $(LIBS) $(LINK_FLAGS)
+	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $^ $(LIBS) $(LIBDL) $(LINK_FLAGS)
+
+test_malloc_lib_unload.$(TEST_EXT): test_malloc_lib_unload.cpp
+	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $^ $(LIBS) $(LIBDL) $(LINK_FLAGS)
 
 $(MALLOC_MAIN_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(MALLOC_LIB) $(LIBS) $(LINK_FLAGS)
@@ -163,8 +166,10 @@ $(MALLOC_C_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
 endif
 
+MALLOC_TESTS = $(MALLOC_MAIN_TESTS) $(MALLOC_OVERLOAD_TESTS) $(MALLOC_C_TESTS) test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT)
 # run_cmd is usually empty
-malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS) $(MALLOC_OVERLOAD_TESTS) test_malloc_whitebox.$(TEST_EXT) $(AUX_TEST_DEPENDENCIES)
+malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(TEST_PREREQUISITE) $(MALLOC_TESTS)
+	$(run_cmd) ./test_malloc_lib_unload.$(TEST_EXT)
 	$(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) 1:4
 	$(run_cmd) $(TEST_LAUNCHER) -l $(call cross_suffix,$(MALLOCPROXY.DLL)) test_malloc_overload.$(TEST_EXT)
 	$(run_cmd) $(TEST_LAUNCHER) test_malloc_overload_proxy.$(TEST_EXT)
diff --git a/build/Makefile.test b/build/Makefile.test
index 8b9c339..bef7713 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -67,6 +67,7 @@ KNOWN_NOSTRICT += \
 	test_task_group.o	\
 	test_tbb_header.o	\
 	test_combinable.o	\
+	test_critical_section.o \
 	test_tbb_version.o
 
 endif
@@ -78,13 +79,14 @@ include $(tbb_root)/build/common_rules.inc
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
 
 # Rules for generating a test DLL
-%.$(DLL).$(OBJ): %.cpp
+%_dll.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
-%.$(DLL): %.$(DLL).$(OBJ) $(TBB.LIB)
+%_dll.$(DLL): %_dll.$(OBJ) $(TBB.LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS) $(DYLIB_KEY)
+.PRECIOUS: %_dll.$(OBJ)
 
 # Rules for the tests, which use TBB in a dynamically loadable library
-test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin.$(DLL)
+test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin_dll.$(DLL)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
 
 TASK_CPP_DEPENDENCIES = $(TBB_ASM.OBJ) \
@@ -109,7 +111,7 @@ TASK_CPP_DIRECTLY_INCLUDED = test_eh_tasks.$(TEST_EXT) \
  test_task_assertions.$(TEST_EXT) \
  test_assembly.$(TEST_EXT)
 
-$(TASK_CPP_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
+$(TASK_CPP_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS) $(RML_WARNING_SUPPRESS)
 
 $(TASK_CPP_DIRECTLY_INCLUDED): %.$(TEST_EXT) : %.$(OBJ) $(TASK_CPP_DEPENDENCIES)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBDL) $(LIBS) $(LINK_FLAGS)
@@ -175,6 +177,7 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_tbb_header.$(TEST_EXT)                  \
 	test_combinable.$(TEST_EXT)                  \
 	test_task_auto_init.$(TEST_EXT)              \
+	test_critical_section.$(TEST_EXT)            \
 	test_tbb_version.$(TEST_EXT)                 # insert new files right above
 
 ifdef OPENMP_FLAG
@@ -182,8 +185,8 @@ ifdef OPENMP_FLAG
 test_openmp.$(TEST_EXT): test_openmp.cpp
 	$(CPLUS) $(OPENMP_FLAG) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(INCLUDES) $< $(LIBS) $(LINK_TBB.LIB) $(LINK_FLAGS)
 .PHONY: test_tbb_openmp
-test_tbb_openmp: test_openmp.$(TEST_EXT)
-	./test_openmp.$(TEST_EXT) 1:4
+test_tbb_openmp: $(TEST_PREREQUISITE) test_openmp.$(TEST_EXT)
+	$(run_cmd) ./test_openmp.$(TEST_EXT) 1:4
 
 endif
 
@@ -191,7 +194,7 @@ endif
 # 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.
 # Note that usually run_cmd is empty, and tests run directly
-test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
+test_tbb_plain: $(TEST_PREREQUISITE) $(TEST_TBB_PLAIN.EXE)
 	$(run_cmd) ./test_assembly.$(TEST_EXT)
 	$(run_cmd) ./test_compiler.$(TEST_EXT)
         # Yes, 4:8 is intended on the next line. 
@@ -242,6 +245,7 @@ test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
 	$(run_cmd) ./test_ittnotify.$(TEST_EXT) 2:2
 	$(run_cmd) ./test_parallel_for_each.$(TEST_EXT) 1:4
 	$(run_cmd) ./test_tbb_header.$(TEST_EXT)
+	$(run_cmd) ./test_critical_section.$(TEST_EXT) 1:4
 	$(run_cmd) ./test_tbb_version.$(TEST_EXT)
 
 CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS)
@@ -262,7 +266,7 @@ $(TEST_TBB_OLD.OBJ): %.$(OBJ): %.cpp
 TEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ) $(TEST_TBB_DEPRECATED.OBJ))
 
 ifeq (,$(NO_LEGACY_TESTS))
-test_tbb_old: $(TEST_TBB_OLD.EXE)
+test_tbb_old: $(TEST_PREREQUISITE) $(TEST_TBB_OLD.EXE)
 	$(run_cmd) ./test_concurrent_vector_v2.$(TEST_EXT) 1:4
 	$(run_cmd) ./test_concurrent_vector_deprecated.$(TEST_EXT) 1:4
 	$(run_cmd) ./test_concurrent_queue_v2.$(TEST_EXT) 1:4
@@ -281,7 +285,7 @@ codecov_gen:
 	codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
 endif
 
-test_% debug_%: test_%.$(TEST_EXT) $(AUX_TEST_DEPENDENCIES)
+test_% debug_%: $(TEST_PREREQUISITE) test_%.$(TEST_EXT)
 ifeq (,$(repeat))
 	$(run_cmd) ./$< $(args)
 else
@@ -296,7 +300,7 @@ ifneq (,$(codecov))
 	codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
 endif
 
-time_%: time_%.$(TEST_EXT) $(AUX_TEST_DEPENDENCIES)
+time_%: $(TEST_PREREQUISITE) time_%.$(TEST_EXT)
 	$(run_cmd) ./$< $(args)
 
 
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
index f60073b..83e612e 100644
--- a/build/SunOS.gcc.inc
+++ b/build/SunOS.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -39,6 +39,7 @@ LIBDL = -ldl
 TBB_NOSTRICT = 1
 
 CPLUS = g++ 
+CONLY = gcc
 LIB_LINK_FLAGS = -shared
 LIBS = -lpthread -lrt -ldl 
 C_FLAGS = $(CPLUS_FLAGS) -x c
diff --git a/build/SunOS.inc b/build/SunOS.inc
index a3b378a..c903386 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -45,8 +45,13 @@ ifndef runtime
         export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
 endif
 
-native_compiler := suncc
-export compiler ?= suncc
+ifeq ($(arch),sparc)
+        native_compiler := gcc
+        export compiler ?= gcc
+else
+        native_compiler := suncc
+        export compiler ?= suncc
+endif
 # debugger ?= gdb
 
 CMD=$(SHELL) -c
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
index 9aac117..c5e80bf 100644
--- a/build/SunOS.suncc.inc
+++ b/build/SunOS.suncc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/common.inc b/build/common.inc
index 4ccb36a..729852b 100644
--- a/build/common.inc
+++ b/build/common.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -60,6 +60,13 @@ ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).$(compiler).inc),)
   $(error Compiler "$(compiler)" is not supported on $(tbb_os). Add build/$(tbb_os).$(compiler).inc file with compiler-specific settings )
 endif
 
+ifdef target
+ ifeq ($(wildcard $(tbb_root)/build/$(target).inc),)
+  $(error "$(target)" is not supported. Add build/$(target).inc file)
+ endif
+ include $(tbb_root)/build/$(target).inc
+endif
+
 # Support for running debug tests to release library and vice versa
 flip_cfg=$(subst _flipcfg,_release,$(subst _release,_debug,$(subst _debug,_flipcfg,$(1))))
 cross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1))
@@ -70,7 +77,7 @@ ifdef BUILDING_PHASE
  # No lambas or other C++0x extensions by default for compilers that implement them as experimental features
  lambdas ?= 0
  cpp0x ?= 0
-  # include compiler-specific build configurations
+ # include compiler-specific build configurations
  -include $(tbb_root)/build/$(tbb_os).$(compiler).inc
  ifdef extra_inc
   -include $(tbb_root)/build/$(extra_inc)
diff --git a/build/common_rules.inc b/build/common_rules.inc
index 5957af5..78e52ca 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -24,8 +24,6 @@
 # invalidate any other reasons why the executable file might be covered by
 # the GNU General Public License.
 
-.PRECIOUS: %.$(OBJ) %.$(DLL).$(OBJ) %.exe
-
 ifeq ($(tbb_strict),1)
   ifeq ($(WARNING_AS_ERROR_KEY),)
     $(error WARNING_AS_ERROR_KEY is empty)
@@ -38,6 +36,8 @@ ifndef TEST_EXT
     TEST_EXT = exe
 endif
 
+.PRECIOUS: %.$(OBJ) %.$(TEST_EXT) %.res
+
 INCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/src/rml/include $(INCLUDE_KEY)$(tbb_root)/include
 
 CPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS)
@@ -105,9 +105,6 @@ tbb_misc.E: tbb_misc.cpp version_string.tmp
 %.res: %.rc version_string.tmp $(TBB.MANIFEST)
 	rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
 
-tbbvars:
-	$(MAKE_TBBVARS)
-
 ifneq (,$(TBB.MANIFEST))
 $(TBB.MANIFEST):
 	cmd /C "echo #include ^<stdio.h^> >tbbmanifest.c"
diff --git a/build/detect.js b/build/detect.js
index b11c954..8e90dc0 100644
--- a/build/detect.js
+++ b/build/detect.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 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 0a20885..99a26de 100644
--- a/build/generate_tbbvars.bat
+++ b/build/generate_tbbvars.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 REM
 REM This file is part of Threading Building Blocks.
 REM
diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh
index 1e1b02c..ec0561f 100644
--- a/build/generate_tbbvars.sh
+++ b/build/generate_tbbvars.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/index.html b/build/index.html
index db60186..ef17214 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 05b3b3f..b57827b 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -73,7 +73,7 @@ ifeq (intel64,$(arch))
 endif 
 
 ifeq (ia32,$(arch))
-    CPLUS_FLAGS += -m32
+    CPLUS_FLAGS += -m32 -march=pentium4
     LIB_LINK_FLAGS += -m32
 endif 
 
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index 9c368cb..f85e031 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -65,6 +65,10 @@ ASM_FLAGS=
 
 TBB_ASM.OBJ=
 
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -falign-stack=maintain-16-byte
+endif
+
 ifeq (ia64,$(arch))
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
     CPLUS_FLAGS += $(PIC_KEY)
diff --git a/build/linux.inc b/build/linux.inc
index d858445..c60faee 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/seismic/Makefile b/build/lrb.host.inc
similarity index 58%
copy from examples/parallel_for/seismic/Makefile
copy to build/lrb.host.inc
index f860d85..679948e 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/build/lrb.host.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -24,39 +24,31 @@
 # invalidate any other reasons why the executable file might be covered by
 # the GNU General Public License.
 
-# GNU Makefile that builds and runs example.
-NAME=seismic
-ARGS=- 300
-
-# The C++ compiler
-#CXX=g++
-
-include ../../common/gui/Makefile.gmake
-
-all:	release test
+ifeq ($(CPLUS),)
+ $(error Host compiler should be included, it is used for host application and netsim)
+endif
 
-resources:
-ifeq ($(UI),mac)
-	mkdir -p $(APPRES)/English.lproj $(NAME).app/Contents/MacOS
-	$(PBXCP) xcode/English.lproj/main.nib $(APPRES)/English.lproj
-	$(PBXCP) xcode/Info.plist $(APPRES)
+ifeq (ia32,$(arch))
+ LRB_HOST_ARCH = 32# TODO: check what is NETSIM_LRB_32_OVERRIDE
+ MACHINE_TYPE = x86
+else
+ LRB_HOST_ARCH = 64#
+ MACHINE_TYPE = x64
 endif
 
-release: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb $(LIBS)
+CPLUS_FLAGS_HOST := $(CPLUS_FLAGS) /I$(LRB_INC_DIR) $(LINK_FLAGS) /LIBPATH:$(LRB_LIB_DIR) xn_host$(LRB_HOST_ARCH)$(CFG_LETTER).lib
+CPLUS_FLAGS += /I$(LRB_INC_DIR) /D__LRB__
+LRB_LINK_FLAGS = /LIBPATH:$(LRB_LIB_DIR) xn_lrb$(LRB_HOST_ARCH)$(CFG_LETTER).lib /NODEFAULTLIB:"LIBCMT"
+LINK_FLAGS += $(DYLIB_KEY) $(LRB_LINK_FLAGS)
+LIB_LINK_FLAGS += $(LRB_LINK_FLAGS)
 
-debug: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
-	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb_debug $(LIBS)
+ifdef TEST_RESOURCE
+LINK_FLAGS += $(TEST_RESOURCE) /MACHINE:$(MACHINE_TYPE)
 
-clean:
-	$(RM) $(EXE) *.o *.d
-ifeq ($(UI),mac)
-	rm -rf $(NAME).app
-endif
+$(TEST_PREREQUISITE): harness_lrb_host.cpp
+	cl /Fe$@ $< $(CPLUS_FLAGS_HOST)
 
-test:
-ifeq ($(UI),mac)
-	export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; ./$(EXE) $(ARGS)
-else
-	./$(EXE) $(ARGS)
+NO_LEGACY_TESTS = 1
+NO_C_TESTS = 1
+TEST_LAUNCHER=# for tbbmalloc
 endif
diff --git a/build/lrb.inc b/build/lrb.inc
new file mode 100644
index 0000000..b9ac306
--- /dev/null
+++ b/build/lrb.inc
@@ -0,0 +1,90 @@
+# Copyright 2005-2010 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.
+
+ifeq ($(tbb_os),lrb)
+ $(error Supported only cross compilation. Specify "target=lrb" instead)
+endif
+
+# execution environment: "no", "native" (+xensim), "netsim", "sde" (no xn)
+ifeq (1,$(XENSIM_ENABLED))
+ lrb ?= native
+else
+ lrb ?= no
+endif
+
+LRBSDK = $(LARRABEE_CORE_LATEST)
+LRB_LIB_DIR = "$(LRBSDK)lib"
+LRB_INC_DIR = "$(LRBSDK)include"
+ifeq ($(cfg),debug)
+ CFG_LETTER = d#
+else
+ CFG_LETTER = r#
+endif
+# Function $(wildcard pattern) does not work with paths containing spaces!
+ifndef XN_VER # avoid unnecessary call to shell
+ export XN_VER:=$(patsubst libxn%_lrb64d.so,%,$(shell $(CMD) "dir /B "$(LRBSDK)lib$(SLASH)libxn"*_lrb64d.so 2>$(NUL)"))
+ ifeq ($(XN_VER),)
+  $(error "Wrong environment: LARRABEE_CORE_LATEST=$(LARRABEE_CORE_LATEST)")
+ endif
+ $(warning LRB cross compilation mode: XN=$(XN_VER) lrb=$(lrb))
+endif
+
+ifeq (netsim,$(lrb)) # compile native binaries linked win XN library
+ extra_inc = lrb.host.inc # will be included after host compiler
+ BUILD_PREFIX = $(tbb_os)_$(arch)_$(compiler)_$(runtime)_xn$(XN_VER)
+ TEST_PREREQUISITE := harness_lrb_host.exe
+ TEST_EXT = dll
+ export LARRABEE_EMULATION=WIN64
+else # Target binaries are native LRB
+ extra_inc = lrb.native.inc # will be included after host compiler
+ LRB_ARCH=$(if $(findstring L1OM,$(shell $(CMD) "icpc -V 2>&1")),l1om,x86_64)
+ ifneq (sde,$(lrb))
+  BUILD_PREFIX = lrb_$(LRB_ARCH)_xn$(XN_VER)
+  TEST_PREREQUISITE := host_$(tbb_os)_$(arch)_$(runtime).exe
+ else #sde
+  BUILD_PREFIX = lrb_$(LRB_ARCH)
+ endif # sde
+endif # netsim
+
+ifeq ($(tbb_build_prefix),) # avoid unnecessary call to shell
+ export tbb_build_prefix:=$(BUILD_PREFIX)
+endif
+ifneq ($(filter native netsim,$(lrb)),)
+ run_cmd=$(TEST_PREREQUISITE)
+else # no, sde
+ ifeq ($(run_cmd),)
+  run_cmd=@echo skip -
+ endif
+endif
+
+# detects whether examples are being built. TODO.
+ifeq ($(BUILDING_PHASE),0)
+ export RM
+ export LIBS = -shared -lthr -z muldefs -L$(work_dir)_debug -L$(work_dir)_release
+ export UI = con
+ export x64 = 64
+ export CXXFLAGS = -xR -I..\..\..\include
+endif # examples
diff --git a/build/lrb.native.inc b/build/lrb.native.inc
new file mode 100644
index 0000000..b88bbdc
--- /dev/null
+++ b/build/lrb.native.inc
@@ -0,0 +1,100 @@
+# Copyright 2005-2010 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.
+
+# detects whether the tests are being built
+ifdef TEST_RESOURCE
+ # host compiler is used for host application
+ include $(tbb_root)/build/lrb.host.inc
+endif # TEST_RESOURCE
+
+# redefine all necessary variables
+OBJ = o
+DLL = so
+LIBEXT = so
+
+TBB.DEF = $(tbb_root)/src/tbb/lin64-tbb-export.def
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.DLL)
+TBB.RES =
+TBB.MANIFEST=
+
+RML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def
+RML.DLL = libirml$(DEBUG_SUFFIX).$(DLL)
+RML.RES =
+
+MALLOC.DEF = $(MALLOC_ROOT)/lin-tbbmalloc-export.def
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+MALLOC.RES = 
+
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/lin64-proxy-export.def
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY.LIB = $(MALLOCPROXY.DLL)
+
+MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_winlrb.js $(compiler) $(arch) $(subst \,/,"$(CPLUS) $(CPLUS_FLAGS) $(INCLUDES)") > version_string.tmp
+MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
+
+TBB_NOSTRICT = 1
+
+CPLUS = icpc
+CONLY = icc
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+EXPORT_KEY = -Wl,--version-script,
+WARNING_KEY = -w1
+WARNING_AS_ERROR_KEY = -Werror
+DYLIB_KEY = -shared
+ifeq ($(cfg),release)
+ CPLUS_FLAGS = -O0 -DUSE_PTHREAD # TODO: -O2
+endif
+ifeq ($(cfg),debug)
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
+endif
+ASM=
+ASM_FLAGS=
+TBB_ASM.OBJ=
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+#LIBS = -u _read -lcprts -lthr -lc
+#LIBS = -lthr
+LIBS = -u _read -lthr -limf -lc
+CPLUS_FLAGS += -xR $(PIC_KEY) -I$(LRB_INC_DIR) -D__TBB_LRB_NATIVE
+C_FLAGS = $(CPLUS_FLAGS)
+LIB_LINK_FLAGS = $(LINK_FLAGS)
+OPENMP_FLAG =
+ifeq (sde,$(lrb))
+CPLUS_FLAGS += -D__TBB_LRB_NO_XN
+LINK_FLAGS =
+LIB_LINK_FLAGS += $(DYLIB_KEY)
+else
+LINK_FLAGS = -L$(LRB_LIB_DIR) $(DYLIB_KEY) -lxn$(XN_VER)_lrb64$(CFG_LETTER)
+TEST_EXT = so
+endif
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index 14a9016..2f81e5e 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -36,6 +36,7 @@ PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -Wall
 WARNING_SUPPRESS =
+RML_WARNING_SUPPRESS = -Wno-non-virtual-dtor
 DYLIB_KEY = -dynamiclib
 EXPORT_KEY = -Wl,-exported_symbols_list,
 LIBDL = -ldl
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
index 7507ec0..fbca6d9 100644
--- a/build/macos.icc.inc
+++ b/build/macos.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/macos.inc b/build/macos.inc
index 4e2f4db..15c9e1d 100644
--- a/build/macos.inc
+++ b/build/macos.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -69,7 +69,7 @@ OBJ=o
 DLL=dylib
 LIBEXT=dylib
 
-def_prefix = $(if $(findstring 32,$(arch)),mac32,mac64)
+def_prefix = $(if $(findstring 64,$(arch)),mac64,mac32)
 
 TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
 TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
diff --git a/build/test_launcher.bat b/build/test_launcher.bat
index bc52a44..a261494 100644
--- a/build/test_launcher.bat
+++ b/build/test_launcher.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 REM
 REM This file is part of Threading Building Blocks.
 REM
diff --git a/build/test_launcher.sh b/build/test_launcher.sh
index 0f691ba..48a382b 100644
--- a/build/test_launcher.sh
+++ b/build/test_launcher.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 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 87d7551..11e5abf 100644
--- a/build/version_info_linux.sh
+++ b/build/version_info_linux.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
index d6a40af..8ba45d6 100644
--- a/build/version_info_macos.sh
+++ b/build/version_info_macos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh
index 1634116..557f2e2 100644
--- a/build/version_info_sunos.sh
+++ b/build/version_info_sunos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
index 1d1efb9..c8e7634 100644
--- a/build/version_info_windows.js
+++ b/build/version_info_windows.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/build/vsproject/index.html b/build/vsproject/index.html
index 82cad00..a0753e4 100644
--- a/build/vsproject/index.html
+++ b/build/vsproject/index.html
@@ -20,7 +20,7 @@ This directory contains the visual studio* 2005 solution to build Threading Buil
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <P></P>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/vsproject/makefile.sln b/build/vsproject/makefile.sln
index 2a681d4..1fd7a8d 100644
--- a/build/vsproject/makefile.sln
+++ b/build/vsproject/makefile.sln
@@ -37,34 +37,62 @@ Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
+		Debug-MT|Win32 = Debug-MT|Win32
+		Debug-MT|x64 = Debug-MT|x64
 		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
+		Release-MT|Win32 = Release-MT|Win32
+		Release-MT|x64 = Release-MT|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.Build.0 = Debug-MT|x64
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64
 		{F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.Build.0 = Debug-MT|x64
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64
 		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.Build.0 = Release-MT|x64
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.Build.0 = Debug-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.ActiveCfg = Debug-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.Build.0 = Debug-MT|x64
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64
 		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.ActiveCfg = Release-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.Build.0 = Release-MT|Win32
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.ActiveCfg = Release-MT|x64
+		{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.Build.0 = Release-MT|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/build/vsproject/tbb.vcproj b/build/vsproject/tbb.vcproj
index 1024d7e..fcd02e9 100644
--- a/build/vsproject/tbb.vcproj
+++ b/build/vsproject/tbb.vcproj
@@ -8,7 +8,7 @@
 		<DefaultToolFile FileName="masm.rules"/>
 	</ToolFiles>
 	<Configurations>
-		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -19,7 +19,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -29,7 +29,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -40,7 +40,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -50,7 +50,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -61,7 +61,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -71,7 +71,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -82,7 +82,91 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" WarningLevel="4" Detec [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" WarningLevel="4"  [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbb.def"" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -97,17 +181,6 @@
 	</References>
 	<Files>
 		<Filter Name="Source Files" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
-			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
-				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-			</File>
 			<File RelativePath="..\..\src\tbb\intel64-masm\atomic_support.asm">
 				<FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">
 					<Tool Name="MASM"/>
@@ -123,6 +196,40 @@
 					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Release\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
 " Outputs="intel64\Release\atomic_support.obj"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Debug-MT\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
+" Outputs="intel64\Debug-MT\atomic_support.obj"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Release-MT\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
+" Outputs="intel64\Release-MT\atomic_support.obj"/>
+				</FileConfiguration>
+			</File>
+			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
+				<FileConfiguration Name="Debug|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbb\itt_notify_proxy.c">
 			</File>
@@ -136,45 +243,88 @@
 				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
 					<Tool Name="MASM"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbb\win32-tbb-export.def">
 				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|Win32">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbb\win64-tbb-export.def">
 				<FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Debug|x64">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|x64">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 			</File>
-			<File RelativePath="..\..\src\tbb\concurrent_hash_map.cpp"/><File RelativePath="..\..\src\tbb\concurrent_queue.cpp"/><File RelativePath="..\..\src\tbb\concurrent_vector.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbb\cache_aligned_allocator.cpp"/><File RelativePath="..\..\src\tbb\pipeline.cpp"/><File RelativePath="..\..\src\tbb\queuing_mutex.cpp"/><File RelativePath="..\..\src\tbb\queuing_r [...]
+			<File RelativePath="..\..\src\tbb\concurrent_hash_map.cpp"/><File RelativePath="..\..\src\tbb\concurrent_queue.cpp"/><File RelativePath="..\..\src\tbb\concurrent_vector.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbb\cache_aligned_allocator.cpp"/><File RelativePath="..\..\src\tbb\pipeline.cpp"/><File RelativePath="..\..\src\tbb\queuing_mutex.cpp"/><File RelativePath="..\..\src\tbb\queuing_r [...]
 		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+			<File RelativePath="..\..\include\tbb\_concurrent_queue_internal.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\_tbb_windef.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\aligned_space.h">
@@ -189,6 +339,8 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\cache_aligned_allocator.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\combinable.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_hash_map.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_queue.h">
@@ -199,24 +351,52 @@
 			</File>
 			<File RelativePath="..\..\src\old\concurrent_vector_v2.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\critical_section.h">
+			</File>
 			<File RelativePath="..\..\src\tbb\dynamic_link.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\enumerable_thread_specific.h">
 			</File>
 			<File RelativePath="..\..\src\tbb\gate.h">
 			</File>
+			<File RelativePath="..\..\src\test\harness.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_allocator.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_assert.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_bad_expr.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_barrier.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_concurrency_tracker.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_cpu.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_eh.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_iterator.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_lrb.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_m128.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_memory.h">
+			</File>
+			<File RelativePath="..\..\src\test\harness_report.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\machine\ibm_aix51.h">
 			</File>
 			<File RelativePath="..\..\src\tbb\itt_notify.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\machine\linux_common.h">
 			</File>
-			<File RelativePath="..\..\include\tbb\machine\linux_intel64.h">
-			</File>
 			<File RelativePath="..\..\include\tbb\machine\linux_ia32.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\machine\linux_ia64.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\machine\linux_intel64.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\machine\mac_ppc.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\mutex.h">
@@ -229,6 +409,10 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\parallel_for.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\parallel_for_each.h">
+			</File>
+			<File RelativePath="..\..\include\tbb\parallel_invoke.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\parallel_reduce.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\parallel_scan.h">
@@ -241,6 +425,8 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\pipeline.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\compat\ppl.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\queuing_mutex.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\queuing_rw_mutex.h">
@@ -257,14 +443,22 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\task.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\task_group.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\task_scheduler_init.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\task_scheduler_observer.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\tbb.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbb_allocator.h">
 			</File>
 			<File RelativePath="..\..\src\tbb\tbb_assert_impl.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\tbb_config.h">
+			</File>
+			<File RelativePath="..\..\include\tbb\tbb_config_lrb.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbb_exception.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_machine.h">
@@ -281,12 +475,18 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\tbbmalloc_proxy.h">
 			</File>
+			<File RelativePath="..\..\src\test\test_allocator.h">
+			</File>
+			<File RelativePath="..\..\src\test\test_allocator_STL.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tick_count.h">
 			</File>
-			<File RelativePath="..\..\include\tbb\machine\windows_intel64.h">
+			<File RelativePath="..\..\src\tbb\tls.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\machine\windows_ia32.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\machine\windows_intel64.h">
+			</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}">
 			<File RelativePath="..\..\src\tbb\tbb_resource.rc">
@@ -302,6 +502,18 @@
 				<FileConfiguration Name="Release|x64">
 					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
 			</File>
 		</Filter>
 	</Files>
diff --git a/build/vsproject/tbbmalloc.vcproj b/build/vsproject/tbbmalloc.vcproj
index 26cc44b..68ed9dd 100644
--- a/build/vsproject/tbbmalloc.vcproj
+++ b/build/vsproject/tbbmalloc.vcproj
@@ -8,7 +8,7 @@
 		<DefaultToolFile FileName="masm.rules"/>
 	</ToolFiles>
 	<Configurations>
-		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -19,7 +19,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -29,7 +29,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -40,7 +40,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -50,7 +50,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -61,7 +61,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -71,7 +71,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -82,7 +82,91 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="1" TreatWChar_tAsBu [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Det [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" De [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -97,17 +181,6 @@
 	</References>
 	<Files>
 		<Filter Name="Source Files" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
-			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
-				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
-				</FileConfiguration>
-				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="MASM"/>
-				</FileConfiguration>
-			</File>
 			<File RelativePath="..\..\src\tbb\intel64-masm\atomic_support.asm">
 				<FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">
 					<Tool Name="MASM"/>
@@ -123,6 +196,40 @@
 					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Release\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
 " Outputs="intel64\Release\atomic_support.obj"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Debug-MT\atomic_support.obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
+" Outputs="intel64\Debug-MT\atomic_support.obj"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo"intel64\Release-MT\atomic_support.obj"  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm
+" Outputs="intel64\Release-MT\atomic_support.obj"/>
+				</FileConfiguration>
+			</File>
+			<File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">
+				<FileConfiguration Name="Debug|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbb\itt_notify_proxy.c">
 			</File>
@@ -136,45 +243,88 @@
 				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
 					<Tool Name="MASM"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM" AdditionalOptions="/coff /Zi"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="MASM"/>
+				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\win32-tbbmalloc-export.def">
 				<FileConfiguration Name="Debug|Win32">
-					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbbmalloc.def
-" Outputs="$(IntDir)\tbbmalloc.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbbmalloc.def
-" Outputs="$(IntDir)\tbbmalloc.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|Win32">
-					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbbmalloc.def
-" Outputs="$(IntDir)\tbbmalloc.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|x64" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32">
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\win64-tbbmalloc-export.def">
 				<FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Debug|x64">
-					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbbmalloc.def
-" Outputs="$(IntDir)\tbbmalloc.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">
-					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbb.def
-" Outputs="$(IntDir)\tbb.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
 				</FileConfiguration>
 				<FileConfiguration Name="Release|x64">
-					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >$(IntDir)\tbbmalloc.def
-" Outputs="$(IntDir)\tbbmalloc.def"/>
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32" ExcludedFromBuild="true">
+					<Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbb.def"
+" Outputs=""$(IntDir)\tbb.def""/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)\tbbmalloc.def"
+" Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\tbbmalloc.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\tbb_misc.cpp"/><File RelativePath="..\..\src\tbbmalloc\MemoryAllocator.cpp"/></Filter>
 		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+			<File RelativePath="..\..\include\tbb\_concurrent_queue_internal.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\_tbb_windef.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\aligned_space.h">
@@ -189,17 +339,21 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\cache_aligned_allocator.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\combinable.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_hash_map.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_queue.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\concurrent_vector.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\critical_section.h">
+			</File>
 			<File RelativePath="..\..\src\tbbmalloc\Customize.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\enumerable_thread_specific.h">
 			</File>
-			<File RelativePath="..\..\src\tbbmalloc\LifoQueue.h">
+			<File RelativePath="..\..\src\tbbmalloc\LifoList.h">
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\MapMemory.h">
 			</File>
@@ -213,6 +367,10 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\parallel_for.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\parallel_for_each.h">
+			</File>
+			<File RelativePath="..\..\include\tbb\parallel_invoke.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\parallel_reduce.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\parallel_scan.h">
@@ -225,6 +383,8 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\pipeline.h">
 			</File>
+			<File RelativePath="..\..\src\tbbmalloc\proxy.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\queuing_mutex.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\queuing_rw_mutex.h">
@@ -241,14 +401,24 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\task.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\task_group.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\task_scheduler_init.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\task_scheduler_observer.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\tbb.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbb_allocator.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\tbb_config.h">
+			</File>
+			<File RelativePath="..\..\include\tbb\tbb_config_lrb.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbb_exception.h">
 			</File>
+			<File RelativePath="..\..\src\tbbmalloc\tbb_function_replacement.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbb_machine.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_profiling.h">
@@ -257,16 +427,18 @@
 			</File>
 			<File RelativePath="..\..\include\tbb\tbb_thread.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\tbb_version.h">
+			</File>
 			<File RelativePath="..\..\include\tbb\tbbmalloc_proxy.h">
 			</File>
 			<File RelativePath="..\..\include\tbb\tick_count.h">
 			</File>
 			<File RelativePath="..\..\src\tbbmalloc\TypeDefinitions.h">
 			</File>
-			<File RelativePath="..\..\include\tbb\machine\windows_intel64.h">
-			</File>
 			<File RelativePath="..\..\include\tbb\machine\windows_ia32.h">
 			</File>
+			<File RelativePath="..\..\include\tbb\machine\windows_intel64.h">
+			</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}">
 			<File RelativePath="..\..\src\tbbmalloc\tbbmalloc.rc">
@@ -282,6 +454,18 @@
 				<FileConfiguration Name="Release|x64">
 					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
 			</File>
 		</Filter>
 	</Files>
diff --git a/build/vsproject/tbbmalloc_proxy.vcproj b/build/vsproject/tbbmalloc_proxy.vcproj
index 57d65f7..eee991d 100644
--- a/build/vsproject/tbbmalloc_proxy.vcproj
+++ b/build/vsproject/tbbmalloc_proxy.vcproj
@@ -8,7 +8,7 @@
 		<DefaultToolFile FileName="masm.rules"/>
 	</ToolFiles>
 	<Configurations>
-		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -19,7 +19,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO " AdditionalDependencies="$(OutDir)\tbbmalloc_debug.lib" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO " OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -29,7 +29,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+		<Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -40,7 +40,7 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -50,7 +50,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -71,7 +71,7 @@
 			<Tool Name="VCWebDeploymentTool"/>
 			<Tool Name="VCPostBuildEventTool"/>
 		</Configuration>
-		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+		<Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
 			<Tool Name="VCPreBuildEventTool"/>
 			<Tool Name="VCCustomBuildTool"/>
 			<Tool Name="MASM"/>
@@ -82,7 +82,91 @@
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
-			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRuntimeChecks="0" RuntimeLibrary=" [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO " OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Debug-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="1" TreatWChar_tAsBuil [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detec [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  " OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>
+			<Tool Name="VCALinkTool"/>
+			<Tool Name="VCManifestTool"/>
+			<Tool Name="VCXDCMakeTool"/>
+			<Tool Name="VCBscMakeTool"/>
+			<Tool Name="VCFxCopTool"/>
+			<Tool Name="VCAppVerifierTool"/>
+			<Tool Name="VCWebDeploymentTool"/>
+			<Tool Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration Name="Release-MT|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">
+			<Tool Name="VCPreBuildEventTool"/>
+			<Tool Name="VCCustomBuildTool"/>
+			<Tool Name="MASM"/>
+			<Tool Name="VCXMLDataGeneratorTool"/>
+			<Tool Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Dete [...]
+			<Tool Name="VCManagedResourceCompilerTool"/>
+			<Tool Name="VCResourceCompilerTool"/>
+			<Tool Name="VCPreLinkEventTool"/>
+			<Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)\tbbmalloc.def"" OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>
 			<Tool Name="VCALinkTool"/>
 			<Tool Name="VCManifestTool"/>
 			<Tool Name="VCXDCMakeTool"/>
@@ -118,6 +202,18 @@
 				<FileConfiguration Name="Release|x64">
 					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
 				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Debug-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|Win32">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
+				<FileConfiguration Name="Release-MT|x64">
+					<Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>
+				</FileConfiguration>
 			</File>
 		</Filter>
 	</Files>
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
index 1051ece..31cd8fc 100644
--- a/build/windows.cl.inc
+++ b/build/windows.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -35,7 +35,11 @@
 CPLUS = cl /nologo
 LINK_FLAGS = /link /nologo
 LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
-MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+ifeq ($(runtime), vc_mt)
+	MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
+else
+	MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+endif
 EH_FLAGS = /EHsc /GR
               
 ifeq ($(cfg), release)
@@ -73,6 +77,11 @@ ifeq ($(runtime),vc8)
         WARNING_KEY += /Wp64
         CPLUS_FLAGS += /D_USE_RTM_VERSION
 endif
+ifeq ($(runtime),vc_mt)
+        OPENMP_FLAG = /openmp
+        WARNING_KEY += /Wp64
+        CPLUS_FLAGS += /D_USE_RTM_VERSION
+endif
 ifeq ($(runtime),vc9)
         OPENMP_FLAG = /openmp
 endif
diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc
index b52d2a7..9b4a981 100644
--- a/build/windows.gcc.inc
+++ b/build/windows.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
index 386c5d8..6f1c21f 100644
--- a/build/windows.icl.inc
+++ b/build/windows.icl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -44,7 +44,11 @@ cfg ?= release
 CPLUS = icl /nologo $(VCCOMPAT_FLAG)
 LINK_FLAGS = /link /nologo
 LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
-MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+ifeq ($(runtime), vc_mt)
+	MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
+else
+	MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+endif
 EH_FLAGS = /EHsc /GR
 
 ifeq ($(cfg), release)
@@ -56,7 +60,6 @@ endif
 endif
 ifeq ($(cfg), debug)
     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
 
@@ -90,6 +93,10 @@ ifeq ($(runtime),vc8)
         CPLUS_FLAGS += /D_USE_RTM_VERSION
 endif
 
+ifeq ($(runtime),vc_mt)
+        CPLUS_FLAGS += /D_USE_RTM_VERSION
+endif
+
 C_FLAGS = $(CPLUS_FLAGS)
 
 ifneq (00,$(lambdas)$(cpp0x))
@@ -97,11 +104,14 @@ ifneq (00,$(lambdas)$(cpp0x))
 endif
 
 VCVERSION:=$(runtime)
-VCCOMPAT_FLAG := $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)
+VCCOMPAT_FLAG ?= $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)
 ifeq ($(VCCOMPAT_FLAG),)
         VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8)
 endif
 ifeq ($(VCCOMPAT_FLAG),)
+        VCCOMPAT_FLAG := $(if $(findstring vc_mt, $(VCVERSION)),/Qvc8)
+endif
+ifeq ($(VCCOMPAT_FLAG),)
         VCCOMPAT_FLAG := $(if $(findstring vc9, $(VCVERSION)),/Qvc9)
 endif
 ifeq ($(VCCOMPAT_FLAG),)
diff --git a/build/windows.inc b/build/windows.inc
index 400864f..7f7a02b 100644
--- a/build/windows.inc
+++ b/build/windows.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -94,7 +94,7 @@ ifneq ($(runtime),vc7.1)
 RML.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_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \,/,"$(CPLUS) $(CPLUS_FLAGS)") > version_string.tmp
 MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
 
 TEST_LAUNCHER =  $(subst /,\,$(tbb_root))\build\test_launcher.bat
diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt
index 8981743..73b1749 100644
--- a/doc/Release_Notes.txt
+++ b/doc/Release_Notes.txt
@@ -90,7 +90,7 @@ Software - Supported Compilers
 	including gcc 3.2 through 4.4
     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 3.1.2 or higher)
+	including: 4.0.1 or higher (Xcode* tool suite 3.1.2 or higher)
 
 
 Known Issues
@@ -106,8 +106,8 @@ Library Issues
 	(Microsoft* Visual Studio* .NET 2003) compiler.
 
     - Unhandled exceptions in the user code executed in the context of
-	TBB algorithms or containers may lead to segmentation faults when
-	Intel(R) C++ Compiler 10.x is used with glibc 2.3.2, 2.3.3, or 2.3.4.
+	TBB algorithms or containers may cause segmentation faults when
+	Intel(R) C++ Compiler 10.x is used with glibc 2.3.2 to 2.3.4.
 
     - To allow more accurate results to be obtained with Intel(R) Thread
 	Checker or Intel(R) Thread Profiler, download the latest update
@@ -137,12 +137,21 @@ Library Issues
 	Fedora* 11. To install the product on the system use license 
 	file provided after registration of the serial number.
 
-    - OpenGL* draw part in examples might freeze during execution on
-    Mac OS* X 10.6 and above but rendering and calculation parts should 
-    work there.
+    - Intel(R) TBB 2.2 Update 1 fixed known bugs with exception handling
+	in concurrent_vector. For applications using both exceptions 
+	and concurrent_vector, recompilation with newer TBB version 
+	is recommended.
+
+    - To use TBB examples with Microsoft Visual Studio* 2010 Beta2,
+	first open a solution for a previous version of Visual Studio
+	and proceed with automatic conversion of the projects. Then 
+	open project properties, and for every configuration replace 
+	vc8 or vc9 with vc_mt in TBB paths used in:
+	- Linker -> General -> Additional Library Directories;
+	- Build Events -> Post-Build Event -> Command Line.
 
 ------------------------------------------------------------------------
-Copyright (C) 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright (C) 2005-2010 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 8ca6cad..23cd34c 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00001.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00116.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00116.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00116.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00121.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00121.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00121.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00002.html b/doc/html/a00002.html
index 84c8e75..3d55d0b 100644
--- a/doc/html/a00002.html
+++ b/doc/html/a00002.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00117.html">tbb::atomic< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(T rhs) (defined in <a class="el" href="a00117.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00117.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic< T > &rhs) (defined in <a class="el" href="a00117.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00117.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00122.html">tbb::atomic< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(T rhs) (defined in <a class="el" href="a00122.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00122.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic< T > &rhs) (defined in <a class="el" href="a00122.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00122.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00003.html b/doc/html/a00003.html
index fa7c0d3..740748b 100644
--- a/doc/html/a00003.html
+++ b/doc/html/a00003.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00118.html">tbb::atomic< void * ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(void *rhs) (defined in <a class="el" href="a00118.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00118.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic< void * > &rhs) (defined in <a class="el" href="a00118.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00118.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00123.html">tbb::atomic< void * ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(void *rhs) (defined in <a class="el" href="a00123.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00123.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic< void * > &rhs) (defined in <a class="el" href="a00123.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00123.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00004.html b/doc/html/a00004.html
index 90ea45c..3e54bbb 100644
--- a/doc/html/a00004.html
+++ b/doc/html/a00004.html
@@ -20,20 +20,20 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00122.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00122.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="a00122.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00122.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="a00122.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00122.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00127.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00127.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="a00127.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00127.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="a00127.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00127.html">tbb::blocked_range< Value ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00005.html b/doc/html/a00005.html
index 735b644..f8b9e82 100644
--- a/doc/html/a00005.html
+++ b/doc/html/a00005.html
@@ -20,16 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00123.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="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00123.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="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00123.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="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00123.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="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00128.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="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00128.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="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00128.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="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00128.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="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00006.html b/doc/html/a00006.html
index c58b3e5..1d762fe 100644
--- a/doc/html/a00006.html
+++ b/doc/html/a00006.html
@@ -20,18 +20,18 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00124.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="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00124.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="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d [...]
-  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00124.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="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00124.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="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00129.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="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00129.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="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00129.html">tbb::blocked_range3d [...]
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00129.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="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00129.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="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00007.html b/doc/html/a00007.html
index 50d7ea8..3f4767d 100644
--- a/doc/html/a00007.html
+++ b/doc/html/a00007.html
@@ -20,24 +20,24 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.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="a00130.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00009.html b/doc/html/a00009.html
index e2a1965..b5fc196 100644
--- a/doc/html/a00009.html
+++ b/doc/html/a00009.html
@@ -20,10 +20,10 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00126.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="a00126.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00126.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="a00126.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00126.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="a00126.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00126.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00131.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="a00131.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00131.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="a00131.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00131.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="a00131.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00131.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00011.html b/doc/html/a00011.html
index 434e35e..898f8b6 100644
--- a/doc/html/a00011.html
+++ b/doc/html/a00011.html
@@ -20,17 +20,17 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="a00128.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combinable</b>() (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(finit _finit) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(const combinable &other) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combine</b>(FCombine fcombine) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(FCombine fcombine) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>local</b>() (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>local</b>(bool &exists) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const combinable &other) (defined in <a class="el" href="a00128.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00128.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="a00133.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>() (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(finit _finit) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(const combinable &other) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine</b>(FCombine fcombine) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(FCombine fcombine) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>local</b>() (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>local</b>(bool &exists) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const combinable &other) (defined in <a class="el" href="a00133.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00133.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00012.html b/doc/html/a00012.html
index 27992c6..d6ca7d6 100644
--- a/doc/html/a00012.html
+++ b/doc/html/a00012.html
@@ -20,9 +20,70 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tbb_hash_compare< T > Member List</h1>This is the complete list of members for <a class="el" href="a00174.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="a00174.html">tbb::tbb_hash_compare< T ></a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::tbb_hash_compare< T ></a>)</td><td><a class="el" href="a00174.html">tbb::tbb_hash_compare< T ></a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() const  (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#d1c1e23f2a3ba1f943d00d95388d718f">bucket_count</a>() const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#36bcd50fd5383f3682032323b2d74333">clear</a>()</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#342582ba05d9fb893ed80875d2b7a42f">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#c1bf3c669935aceb1dc0169e3a19e0be">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#b5132202dff9ee3d619bef6b1d84edea">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count</a>(const Key &key) const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>delete_node</b>(node_base *n) (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a>() const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() const  (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a>(const Key &key)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#fc64086f9f518cef8c368c9429d0064e">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#b65abfa291da566617dd58dfb349630a">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a>(const_accessor &item_accessor, bool readonly)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#9fa1ca60af4ef761a100617b27718585">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator</a>() const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#67d8c254b1666d89267c8a4a33c864f3">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#8ea81ff7fea044f859273b354c91c185">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#3034a308bc839695a5714a107380c4b9">insert</a>(const value_type &value)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#7b42dba04d71e1367f0d542087906178">insert</a>(I first, I last)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(I first, I last) (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#f0cdf5930563a49ffe827c520e948e01">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#6ed260e217fb310050928d7bd03f1b5e">max_size</a>() const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_allocator</b> (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_hash_compare</b> (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>node_allocator_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#adadeb9d1acb8c3b34517435666cf297">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">rehash</a>(size_type n=0)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>search_bucket</b>(const key_type &key, bucket *b) const  (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">size</a>() const </td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#dd73f70aa6602021ea2c56bac9715353">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#5e96649f71f68f3b6bf3b1eee6b441a7">~concurrent_hash_map</a>()</td><td><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
deleted file mode 100644
index ab593c8..0000000
--- a/doc/html/a00013.html
+++ /dev/null
@@ -1,93 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>begin</b>() const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">clear</a>()</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#c1bf3c669935aceb1dc0169e3a19e0be">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count</a>(const Key &key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>delete_node</b>(node_base *n) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>end</b>() const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a>(const Key &key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a>(const_accessor &item_accessor, bool readonly)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#9fa1ca60af4ef761a100617b27718585">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#8ea81ff7fea044f859273b354c91c185">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#3034a308bc839695a5714a107380c4b9">insert</a>(const value_type &value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">insert</a>(I first, I last)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(I first, I last) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#f0cdf5930563a49ffe827c520e948e01">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">max_size</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_allocator</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_hash_compare</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>node_allocator_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>search_bucket</b>(const key_type &key, bucket *b) const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">~concurrent_hash_map</a>()</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></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/a00015.html b/doc/html/a00014.html
similarity index 79%
copy from doc/html/a00015.html
copy to doc/html/a00014.html
index a868022..a324ed7 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00014.html
@@ -20,12 +20,12 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00137.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00137.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>()</td><td><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00137.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a>()</td><td><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index a868022..ee0c3ca 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.html
@@ -20,12 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b> (defined in <a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a>() const </td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#6fc0491f6420ffe38c48786e7b9ab042">operator-></a>() const </td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#b5de4197079009b1cfd8bdeb594c6428">value_type</a> typedef</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
index 304bd06..82453e9 100644
--- a/doc/html/a00016.html
+++ b/doc/html/a00016.html
@@ -20,16 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b> (defined in <a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">operator-></a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">value_type</a> typedef</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#03a091f7355a3c0c03f839893695f372">operator *</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#302f02e5deec0a67b872e9cfb08d9e60">operator-></a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#34035ddb9e2a27f2f0a1f6a2a16730cf">value_type</a> typedef</td><td><a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00017.html b/doc/html/a00017.html
index 8aeadb0..46a7b39 100644
--- a/doc/html/a00017.html
+++ b/doc/html/a00017.html
@@ -20,14 +20,30 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">operator *</a>() const </td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">operator-></a>() const </td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">value_type</a> typedef</td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::strict_ppl::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00139.html">tbb::strict_ppl::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="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index 73dfbb2..8fd9152 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.html
@@ -20,30 +20,34 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::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="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_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="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00019.html b/doc/html/a00019.html
deleted file mode 100644
index 753d85d..0000000
--- a/doc/html/a00019.html
+++ /dev/null
@@ -1,59 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_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="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></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/a00021.html b/doc/html/a00020.html
similarity index 57%
copy from doc/html/a00021.html
copy to doc/html/a00020.html
index a6a2de7..02a36de 100644
--- a/doc/html/a00021.html
+++ b/doc/html/a00020.html
@@ -20,43 +20,43 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a>(InputIterator begin, InputIterator end, const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::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="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00140.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00140.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a>(InputIterator begin, InputIterator end, const A &a=A())</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::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="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_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="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00140.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00021.html b/doc/html/a00021.html
index a6a2de7..f1918f1 100644
--- a/doc/html/a00021.html
+++ b/doc/html/a00021.html
@@ -20,43 +20,77 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a>(InputIterator begin, InputIterator end, const A &a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_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="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_vector_base</b>() const  (defined in <a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00141.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="a00141.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00022.html b/doc/html/a00022.html
deleted file mode 100644
index 8f2a1d1..0000000
--- a/doc/html/a00022.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>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_vector_base</b>() const  (defined in <a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00136.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="a00136.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></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/a00025.html b/doc/html/a00026.html
similarity index 62%
rename from doc/html/a00025.html
rename to doc/html/a00026.html
index 415bdca..3381949 100644
--- a/doc/html/a00025.html
+++ b/doc/html/a00026.html
@@ -20,41 +20,41 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a> typedef</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">begin</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">end</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b> (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a>(Finit _finit)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a>(const T &_exemplar)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific< U, Alloc, Cachetype > &other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">local</a>(bool &exists)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific< U, Alloc, Cachetype > &other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a> typedef</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#ba6674c6102a6faf8f96d131497654b3">begin</a>() const </td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#ad23345a722622199deaa4dfd243d9f8">empty</a>() const </td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#89811890e6a77f1e0cfc6c24ed35d09b">end</a>() const </td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b> (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a>(Finit _finit)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a>(const T &_exemplar)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific< U, Alloc, Cachetype > &other) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#9505351eace34ed7130257adcae91706">local</a>(bool &exists)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific &other) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific< U, Alloc, Cachetype > &other) (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#a32dd1d88e42dc1faccceca244b12b6c">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>() const </td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00029.html b/doc/html/a00029.html
deleted file mode 100644
index 5c35987..0000000
--- a/doc/html/a00029.html
+++ /dev/null
@@ -1,41 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00142.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="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.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="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.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="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00142.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="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</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/a00030.html b/doc/html/a00030.html
index 4dde8fc..2d210db 100644
--- a/doc/html/a00030.html
+++ b/doc/html/a00030.html
@@ -20,14 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>mutex</b> (defined in <a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00150.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="a00150.html">tbb::mutex</a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::mutex</a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::mutex</a>)</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00150.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="a00150.html">tbb::mutex</a>)</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00150.html">tbb::mutex</a>)</td><td><a class="el" href="a00150.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00031.html b/doc/html/a00031.html
index ecb2c61..e901e0b 100644
--- a/doc/html/a00031.html
+++ b/doc/html/a00031.html
@@ -20,11 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::null_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00144.html">tbb::null_mutex</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>null_mutex</b>() (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00151.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00151.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>mutex</b> (defined in <a class="el" href="a00151.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00151.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00151.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00151.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00151.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00151.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00032.html b/doc/html/a00032.html
index 1f4a592..e354e85 100644
--- a/doc/html/a00032.html
+++ b/doc/html/a00032.html
@@ -20,13 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_mutex &) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_mutex &) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_mutex &) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::null_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00152.html">tbb::null_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00152.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00152.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00152.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>null_mutex</b>() (defined in <a class="el" href="a00152.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00033.html b/doc/html/a00033.html
index 3ace8db..84a5da9 100644
--- a/doc/html/a00033.html
+++ b/doc/html/a00033.html
@@ -20,11 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00146.html">tbb::null_rw_mutex</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_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="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_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="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>null_rw_mutex</b>() (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_mutex &) (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_mutex &) (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_mutex &) (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00034.html b/doc/html/a00034.html
index 8de6965..0873f0d 100644
--- a/doc/html/a00034.html
+++ b/doc/html/a00034.html
@@ -20,15 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::null_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>downgrade_to_reader</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00154.html">tbb::null_rw_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00154.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::null_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="a00154.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::null_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="a00154.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::null_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>null_rw_mutex</b>() (defined in <a class="el" href="a00154.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00035.html b/doc/html/a00035.html
index a187139..e3ff5f9 100644
--- a/doc/html/a00035.html
+++ b/doc/html/a00035.html
@@ -20,9 +20,15 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00148.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00148.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="a00148.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00148.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::null_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>downgrade_to_reader</b>() (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_rw_mutex &, bool=true) (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00036.html b/doc/html/a00036.html
index 1c5bfd2..1bdc2e0 100644
--- a/doc/html/a00036.html
+++ b/doc/html/a00036.html
@@ -20,8 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00151.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="a00151.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00151.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00156.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00156.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="a00156.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00156.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00037.html b/doc/html/a00037.html
index cdc7802..2face09 100644
--- a/doc/html/a00037.html
+++ b/doc/html/a00037.html
@@ -20,8 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00140.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="a00140.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00140.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00159.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="a00159.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00159.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00038.html b/doc/html/a00038.html
index 3d7e71c..4dc1c2b 100644
--- a/doc/html/a00038.html
+++ b/doc/html/a00038.html
@@ -20,12 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00149.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00145.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="a00145.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00145.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00039.html b/doc/html/a00039.html
index c3f3c8c..12508d5 100644
--- a/doc/html/a00039.html
+++ b/doc/html/a00039.html
@@ -20,11 +20,12 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00157.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00157.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00157.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00157.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00157.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00157.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00157.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00039.html b/doc/html/a00040.html
similarity index 77%
copy from doc/html/a00039.html
copy to doc/html/a00040.html
index c3f3c8c..7f14a54 100644
--- a/doc/html/a00039.html
+++ b/doc/html/a00040.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00168.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="a00168.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00168.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="a00168.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00168.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="a00168.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00168.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="a00168.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00168.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00041.html b/doc/html/a00042.html
similarity index 77%
rename from doc/html/a00041.html
rename to doc/html/a00042.html
index f1a08f6..ec2fa42 100644
--- a/doc/html/a00041.html
+++ b/doc/html/a00042.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00120.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="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00125.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="a00125.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00125.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="a00125.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00125.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00043.html b/doc/html/a00043.html
deleted file mode 100644
index 8f7d482..0000000
--- a/doc/html/a00043.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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00115.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="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.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="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.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="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.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="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.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="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</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/a00044.html b/doc/html/a00044.html
index ab66727..9adeab0 100644
--- a/doc/html/a00044.html
+++ b/doc/html/a00044.html
@@ -20,24 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00139.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="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.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="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00120.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="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.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="a00120.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00045.html b/doc/html/a00045.html
index 80f2eab..0553e8e 100644
--- a/doc/html/a00045.html
+++ b/doc/html/a00045.html
@@ -20,29 +20,24 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00175.html">tbb::thread_bound_filter</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>end_of_stream</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.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="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>item_not_available</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>result_type</b> enum name (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00144.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="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.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="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00046.html b/doc/html/a00046.html
index 94d4973..06320be 100644
--- a/doc/html/a00046.html
+++ b/doc/html/a00046.html
@@ -20,18 +20,29 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00150.html">tbb::pipeline</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_cleaner</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00182.html">tbb::thread_bound_filter</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>end_of_stream</b> enum value (defined in <a class="el" href="a00182.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.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="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00144.html">tbb::filter</a>)</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>item_not_available</b> enum value (defined in <a class="el" href="a00182.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00182.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>result_type</b> enum name (defined in <a class="el" href="a00182.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00182.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class="el" href="a00182.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00182.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00144.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00144.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00047.html b/doc/html/a00047.html
index a5ff5e6..e40d826 100644
--- a/doc/html/a00047.html
+++ b/doc/html/a00047.html
@@ -20,13 +20,18 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00152.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="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00152.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="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00158.html">tbb::pipeline</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00158.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00158.html">tbb::pipeline</a>)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_cleaner</b> (defined in <a class="el" href="a00158.html">tbb::pipeline</a>)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00158.html">tbb::pipeline</a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::pipeline</a>)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00158.html">tbb::pipeline</a>)</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00158.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00048.html b/doc/html/a00048.html
index 562e2d9..432d1c9 100644
--- a/doc/html/a00048.html
+++ b/doc/html/a00048.html
@@ -20,13 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00160.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="a00160.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00160.html">tbb::queuing_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00160.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00160.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00160.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="a00160.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00160.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00049.html b/doc/html/a00049.html
index 6cde10f..4efe5c2 100644
--- a/doc/html/a00049.html
+++ b/doc/html/a00049.html
@@ -20,14 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00154.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="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00154.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="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00161.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00050.html b/doc/html/a00050.html
index 1e47035..0076995 100644
--- a/doc/html/a00050.html
+++ b/doc/html/a00050.html
@@ -20,15 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00162.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="a00162.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00162.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00162.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="a00162.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00162.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00162.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00051.html b/doc/html/a00051.html
index 3a9e223..21bdab1 100644
--- a/doc/html/a00051.html
+++ b/doc/html/a00051.html
@@ -20,16 +20,15 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00156.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="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00156.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="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~recursive_mutex</b>() (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00052.html b/doc/html/a00052.html
index 0f870a1..6731749 100644
--- a/doc/html/a00052.html
+++ b/doc/html/a00052.html
@@ -20,14 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>recursive_mutex</b> (defined in <a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00164.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="a00164.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00164.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="a00164.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00164.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="a00164.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00164.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="a00164.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~recursive_mutex</b>() (defined in <a class="el" href="a00164.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00164.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00053.html b/doc/html/a00053.html
index a4d7e5a..6ac3b43 100644
--- a/doc/html/a00053.html
+++ b/doc/html/a00053.html
@@ -20,24 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, const value_type &val) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>recursive_mutex</b> (defined in <a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00165.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00165.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00053.html b/doc/html/a00054.html
similarity index 60%
copy from doc/html/a00053.html
copy to doc/html/a00054.html
index a4d7e5a..d21159d 100644
--- a/doc/html/a00053.html
+++ b/doc/html/a00054.html
@@ -20,24 +20,24 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, const value_type &val) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.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="a00158.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+<h1>tbb::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, const value_type &value) (defined in <a class="el" href="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00055.html b/doc/html/a00056.html
similarity index 80%
rename from doc/html/a00055.html
rename to doc/html/a00056.html
index b11b676..52087f3 100644
--- a/doc/html/a00055.html
+++ b/doc/html/a00056.html
@@ -20,10 +20,10 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00159.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="a00159.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00159.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00159.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00159.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+<h1>tbb::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00167.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="a00167.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00167.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00167.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00167.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="a00167.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00167.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00057.html b/doc/html/a00057.html
deleted file mode 100644
index 48d25f2..0000000
--- a/doc/html/a00057.html
+++ /dev/null
@@ -1,41 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00161.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="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</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/a00058.html b/doc/html/a00058.html
index d2b22d1..79fd16a 100644
--- a/doc/html/a00058.html
+++ b/doc/html/a00058.html
@@ -20,14 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>spin_mutex</b> (defined in <a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00169.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="a00169.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00169.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00169.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="a00169.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00169.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="a00169.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00169.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00169.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00059.html b/doc/html/a00059.html
index 09de042..d45a002 100644
--- a/doc/html/a00059.html
+++ b/doc/html/a00059.html
@@ -20,17 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00163.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="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.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="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>spin_mutex</b> (defined in <a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00060.html b/doc/html/a00060.html
index ac7d368..868d80e 100644
--- a/doc/html/a00060.html
+++ b/doc/html/a00060.html
@@ -20,15 +20,17 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00171.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="a00171.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00171.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="a00171.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00171.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="a00171.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00171.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00061.html b/doc/html/a00061.html
index 10e9482..102ec80 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00061.html
@@ -20,24 +20,15 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>no_cancellation</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00172.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00061.html b/doc/html/a00062.html
similarity index 58%
copy from doc/html/a00061.html
copy to doc/html/a00062.html
index 10e9482..1fa1e3f 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00062.html
@@ -20,24 +20,24 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.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="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>no_cancellation</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00175.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="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00175.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="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00175.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="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.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="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>no_cancellation</b> enum value (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00175.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00175.html">tbb::task_group_context</a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00063.html b/doc/html/a00063.html
deleted file mode 100644
index 26abf35..0000000
--- a/doc/html/a00063.html
+++ /dev/null
@@ -1,86 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::task Member List</h1>This is the complete list of members for <a class="el" href="a00166.html">tbb::task</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &victim)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00166.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/a00064.html b/doc/html/a00064.html
index 6452c2b..a509fd2 100644
--- a/doc/html/a00064.html
+++ b/doc/html/a00064.html
@@ -20,59 +20,61 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00137.html">tbb::empty_task</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &victim)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::task Member List</h1>This is the complete list of members for <a class="el" href="a00174.html">tbb::task</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &victim)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &child)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00065.html b/doc/html/a00065.html
index 32eb2f6..41ab68c 100644
--- a/doc/html/a00065.html
+++ b/doc/html/a00065.html
@@ -20,14 +20,59 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00168.html">tbb::task_list</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00168.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="a00168.html">tbb::task_list</a>)</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00142.html">tbb::empty_task</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &victim)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.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="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00174.html">tbb::task</a>)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &child)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00174.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00174.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00065.html b/doc/html/a00066.html
similarity index 68%
copy from doc/html/a00065.html
copy to doc/html/a00066.html
index 32eb2f6..dd062eb 100644
--- a/doc/html/a00065.html
+++ b/doc/html/a00066.html
@@ -20,14 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00168.html">tbb::task_list</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00168.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="a00168.html">tbb::task_list</a>)</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::task_list</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00176.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00176.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="a00176.html">tbb::task_list</a>)</td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00176.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00073.html b/doc/html/a00073.html
index fc3eaa4..62a2e4f 100644
--- a/doc/html/a00073.html
+++ b/doc/html/a00073.html
@@ -20,16 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00169.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00177.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00177.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00075.html b/doc/html/a00075.html
index c0c7f82..31cdddd 100644
--- a/doc/html/a00075.html
+++ b/doc/html/a00075.html
@@ -20,28 +20,28 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.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="a00170.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.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="a00178.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00077.html b/doc/html/a00077.html
index b4a77e9..fd3b02b 100644
--- a/doc/html/a00077.html
+++ b/doc/html/a00077.html
@@ -20,10 +20,10 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00171.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="a00171.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00171.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00171.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00171.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="a00171.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00171.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+<h1>tbb::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00179.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="a00179.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00179.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00179.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00179.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="a00179.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00179.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00079.html b/doc/html/a00079.html
index c8d9b4e..01fbaad 100644
--- a/doc/html/a00079.html
+++ b/doc/html/a00079.html
@@ -20,19 +20,19 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::zero_allocator< T, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>() (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator &a) (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator< U > &a) (defined in <a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::zero_allocator< T, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>() (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator &a) (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator< U > &a) (defined in <a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00081.html b/doc/html/a00081.html
index ce0467d..86b34c1 100644
--- a/doc/html/a00081.html
+++ b/doc/html/a00081.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
+<h1>tbb::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00083.html b/doc/html/a00083.html
index 1ef49ab..14335e3 100644
--- a/doc/html/a00083.html
+++ b/doc/html/a00083.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00121.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="a00121.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00121.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="a00121.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00121.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00126.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="a00126.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00126.html">tbb::bad_last_alloc</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">~bad_last_alloc</a>()</td><td><a class="el" href="a00126.html">tbb::bad_last_alloc</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00084.html b/doc/html/a00084.html
index 3b1d706..d7d7024 100644
--- a/doc/html/a00084.html
+++ b/doc/html/a00084.html
@@ -20,13 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00172.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+<h1>tbb::improper_lock Member List</h1>This is the complete list of members for <a class="el" href="a00146.html">tbb::improper_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>what</b>() const  (defined in <a class="el" href="a00146.html">tbb::improper_lock</a>)</td><td><a class="el" href="a00146.html">tbb::improper_lock</a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00085.html b/doc/html/a00085.html
index 8ab0703..62f6b45 100644
--- a/doc/html/a00085.html
+++ b/doc/html/a00085.html
@@ -20,19 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00127.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="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.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="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00127.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const captured_exception &src) (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set</b>(const char *name, const char *info) (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00127.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="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::missing_wait Member List</h1>This is the complete list of members for <a class="el" href="a00148.html">tbb::missing_wait</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>what</b>() const  (defined in <a class="el" href="a00148.html">tbb::missing_wait</a>)</td><td><a class="el" href="a00148.html">tbb::missing_wait</a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00086.html b/doc/html/a00086.html
index e748dc4..39f67d9 100644
--- a/doc/html/a00086.html
+++ b/doc/html/a00086.html
@@ -20,20 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::invalid_multiple_scheduling Member List</h1>This is the complete list of members for <a class="el" href="a00147.html">tbb::invalid_multiple_scheduling</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>what</b>() const  (defined in <a class="el" href="a00147.html">tbb::invalid_multiple_scheduling</a>)</td><td><a class="el" href="a00147.html">tbb::invalid_multiple_scheduling</a></td><td></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00087.html b/doc/html/a00087.html
index 4574c15..08fc70c 100644
--- a/doc/html/a00087.html
+++ b/doc/html/a00087.html
@@ -20,12 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocate</b>() (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const tbb_exception &tag) (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00180.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00180.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.
diff --git a/doc/html/a00088.html b/doc/html/a00088.html
index 3505a18..b47e8d8 100644
--- a/doc/html/a00088.html
+++ b/doc/html/a00088.html
@@ -20,11 +20,19 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>atomic_backoff</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00132.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="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.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="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const captured_exception &src) (defined in <a class="el" href="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set</b>(const char *name, const char *info) (defined in <a class="el" href="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00132.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="a00132.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00132.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00086.html b/doc/html/a00089.html
similarity index 66%
copy from doc/html/a00086.html
copy to doc/html/a00089.html
index e748dc4..8a0dfc2 100644
--- a/doc/html/a00086.html
+++ b/doc/html/a00089.html
@@ -20,20 +20,20 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00141.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="a00141.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00149.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="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00149.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="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00180.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00149.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="a00149.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00149.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.
diff --git a/doc/html/a00087.html b/doc/html/a00090.html
similarity index 74%
copy from doc/html/a00087.html
copy to doc/html/a00090.html
index 4574c15..6d4c5ac 100644
--- a/doc/html/a00087.html
+++ b/doc/html/a00090.html
@@ -20,12 +20,12 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocate</b>() (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const tbb_exception &tag) (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>() (defined in <a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const tbb_exception &tag) (defined in <a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00181.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00181.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00181.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00088.html b/doc/html/a00091.html
similarity index 77%
copy from doc/html/a00088.html
copy to doc/html/a00091.html
index 3505a18..0403260 100644
--- a/doc/html/a00088.html
+++ b/doc/html/a00091.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>atomic_backoff</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00124.html">tbb::internal::atomic_backoff</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>atomic_backoff</b>() (defined in <a class="el" href="a00124.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00124.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00124.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00095.html b/doc/html/a00095.html
deleted file mode 100644
index be5fb2c..0000000
--- a/doc/html/a00095.html
+++ /dev/null
@@ -1,33 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<h1>tbb::internal::work_around_alignment_bug< Size, T > Member List</h1>This is the complete list of members for <a class="el" href="a00178.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="a00178.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</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/a00098.html b/doc/html/a00098.html
index 33cbf86..b72d4b4 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00098.html
@@ -20,10 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::tick_count</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::work_around_alignment_bug< Size, T > Member List</h1>This is the complete list of members for <a class="el" href="a00185.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="a00185.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00185.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00098.html b/doc/html/a00101.html
similarity index 80%
copy from doc/html/a00098.html
copy to doc/html/a00101.html
index 33cbf86..f0cda6a 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00101.html
@@ -20,10 +20,10 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::tick_count</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00183.html">tbb::tick_count</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00183.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00183.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00183.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00183.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00183.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00099.html b/doc/html/a00102.html
similarity index 68%
rename from doc/html/a00099.html
rename to doc/html/a00102.html
index c0830c3..0d4d791 100644
--- a/doc/html/a00099.html
+++ b/doc/html/a00102.html
@@ -20,16 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00177.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00177.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="a00177.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00184.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00184.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="a00184.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00115.html b/doc/html/a00115.html
deleted file mode 100644
index 02d980b..0000000
--- a/doc/html/a00115.html
+++ /dev/null
@@ -1,62 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00115.html">affinity_partitioner</a></div>
-<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00342.html">partitioner.h</a>></code>
-<p>
-<a href="a00043.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="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
-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="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
-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="181db51277e9b15dd0ec4a0617ab1f92"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce_with_affinity" ref="181db51277e9b15dd0ec4a0617ab1f92" args="" -->
-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="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
-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="e9575467e391b90e0703fadf573dbad7"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::affinity_partition_type" ref="e9575467e391b90e0703fadf573dbad7" args="" -->
-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="a00342.html">partitioner.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/a00116.html b/doc/html/a00116.html
deleted file mode 100644
index abd9c43..0000000
--- a/doc/html/a00116.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>tbb::aligned_space< T, N > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00116.html">aligned_space</a></div>
-<h1>tbb::aligned_space< T, N > Class Template Reference<br>
-<small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::aligned_space" -->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="a00257.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="0d702fc6b9e9d061ace3501b3c861cdf"></a><!-- doxytag: member="tbb::aligned_space::begin" ref="0d702fc6b9e9d061ace3501b3c861cdf" args="()" -->
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">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="024be075c23c0394c9a2518d993bcd9e"></a><!-- doxytag: member="tbb::aligned_space::end" ref="024be075c23c0394c9a2518d993bcd9e" args="()" -->
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">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="a00257.html">aligned_space.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/a00117.html b/doc/html/a00117.html
deleted file mode 100644
index 92402eb..0000000
--- a/doc/html/a00117.html
+++ /dev/null
@@ -1,61 +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::atomic< T > Struct Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00117.html">atomic</a></div>
-<h1>tbb::atomic< T > Struct Template Reference<br>
-<small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::atomic" -->Primary template for atomic.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00258.html">atomic.h</a>></code>
-<p>
-<a href="a00002.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="1e29e03a31436bad5eb1aa5a9d46a2da"></a><!-- doxytag: member="tbb::atomic::operator=" ref="1e29e03a31436bad5eb1aa5a9d46a2da" args="(T rhs)" -->
-T </td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90791297d59b1659cfaf0d93c7cc59ae"></a><!-- doxytag: member="tbb::atomic::operator=" ref="90791297d59b1659cfaf0d93c7cc59ae" args="(const atomic< T > &rhs)" -->
-<a class="el" href="a00117.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00117.html">atomic</a>< T > &rhs)</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. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00258.html">atomic.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/a00118.html b/doc/html/a00118.html
deleted file mode 100644
index a9046fc..0000000
--- a/doc/html/a00118.html
+++ /dev/null
@@ -1,56 +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::atomic< void * > Struct Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00118.html">atomic< void * ></a></div>
-<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00118.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00258.html">atomic.h</a>></code>
-<p>
-<a href="a00003.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="ba6e74163e255b88c497c40db64c5dad"></a><!-- doxytag: member="tbb::atomic< void * >::operator=" ref="ba6e74163e255b88c497c40db64c5dad" args="(void *rhs)" -->
-void * </td><td class="memItemRight" valign="bottom"><b>operator=</b> (void *rhs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="37979e62d1f88eb45bd3ad7df5a140f8"></a><!-- doxytag: member="tbb::atomic< void * >::operator=" ref="37979e62d1f88eb45bd3ad7df5a140f8" args="(const atomic< void * > &rhs)" -->
-<a class="el" href="a00117.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00117.html">atomic</a>< void * > &rhs)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- struct tbb::atomic< void * ></h3>
-
-Specialization for <a class="el" href="a00118.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->. 
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00258.html">atomic.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/a00119.html b/doc/html/a00119.html
deleted file mode 100644
index 019a152..0000000
--- a/doc/html/a00119.html
+++ /dev/null
@@ -1,59 +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::atomic_backoff Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="annotated.html"><span>Class List</span></a></li>
-    <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
-    <li><a href="functions.html"><span>Class Members</span></a></li>
-  </ul></div>
-<div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00119.html">atomic_backoff</a></div>
-<h1>tbb::internal::atomic_backoff Class Reference</h1><!-- doxytag: class="tbb::internal::atomic_backoff" -->Class that implements exponential backoff.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00382.html">tbb_machine.h</a>></code>
-<p>
-<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="a174ea93e3bd3d5cce82389c2f28d037"></a><!-- doxytag: member="tbb::internal::atomic_backoff::pause" ref="a174ea93e3bd3d5cce82389c2f28d037" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">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="c6179b19e2e8dedd73a36d523af2fe12"></a><!-- doxytag: member="tbb::internal::atomic_backoff::bounded_pause" ref="c6179b19e2e8dedd73a36d523af2fe12" args="()" -->
-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="45edb535489eb0e76ecc59a19fd952de"></a><!-- doxytag: member="tbb::internal::atomic_backoff::reset" ref="45edb535489eb0e76ecc59a19fd952de" args="()" -->
-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 spin_wait_while_eq for an example. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00382.html">tbb_machine.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/a00120.html b/doc/html/a00120.html
index b545d6d..eb413ec 100644
--- a/doc/html/a00120.html
+++ b/doc/html/a00120.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::affinity_partitioner Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,38 +21,36 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00120.html">auto_partitioner</a></div>
-<h1>tbb::auto_partitioner Class Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::auto_partitioner" -->An auto partitioner.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00120.html">affinity_partitioner</a></div>
+<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00342.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00355.html">partitioner.h</a>></code>
 <p>
-<a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
 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="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
 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="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="181db51277e9b15dd0ec4a0617ab1f92"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce_with_affinity" ref="181db51277e9b15dd0ec4a0617ab1f92" args="" -->
+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="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
 class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></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"><b>partition_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e9575467e391b90e0703fadf573dbad7"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::affinity_partition_type" ref="e9575467e391b90e0703fadf573dbad7" args="" -->
+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 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. 
+An affinity partitioner. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00342.html">partitioner.h</a></ul>
+<li><a class="el" href="a00355.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00121.html b/doc/html/a00121.html
index f103606..cc2ab32 100644
--- a/doc/html/a00121.html
+++ b/doc/html/a00121.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::aligned_space< T, N > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,24 +21,37 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00121.html">bad_last_alloc</a></div>
-<h1>tbb::bad_last_alloc Class Reference</h1><!-- doxytag: class="tbb::bad_last_alloc" -->Exception for concurrent containers.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00121.html">aligned_space</a></div>
+<h1>tbb::aligned_space< T, N > Class Template Reference<br>
+<small>
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::aligned_space" -->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="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00265.html">aligned_space.h</a>></code>
 <p>
-<a href="a00083.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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f7d876e9190498a13795a5b0ca3e313"></a><!-- doxytag: member="tbb::bad_last_alloc::what" ref="6f7d876e9190498a13795a5b0ca3e313" args="() const " -->
-virtual const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d702fc6b9e9d061ace3501b3c861cdf"></a><!-- doxytag: member="tbb::aligned_space::begin" ref="0d702fc6b9e9d061ace3501b3c861cdf" args="()" -->
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">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="024be075c23c0394c9a2518d993bcd9e"></a><!-- doxytag: member="tbb::aligned_space::end" ref="024be075c23c0394c9a2518d993bcd9e" args="()" -->
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">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>
-Exception for concurrent containers. 
+<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="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00265.html">aligned_space.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00122.html b/doc/html/a00122.html
index 2d6160e..cbffd7f 100644
--- a/doc/html/a00122.html
+++ b/doc/html/a00122.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::atomic< T > Struct Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,198 +21,35 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00122.html">blocked_range</a></div>
-<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00122.html">atomic</a></div>
+<h1>tbb::atomic< T > Struct Template Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range" -->A range over which to iterate.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::atomic" -->Primary template for atomic.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00266.html">blocked_range.h</a>></code>
+<code>#include <<a class="el" href="a00266.html">atomic.h</a>></code>
 <p>
-<a href="a00004.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00002.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="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a value.  <a href="#1a8d05842c2b3dfc177bc4d347e4cef7"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5707bffea38eee5c9680f37358afb8e"></a><!-- doxytag: member="tbb::blocked_range::size_type" ref="f5707bffea38eee5c9680f37358afb8e" args="" -->
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">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="a00122.html#94607755c5110d199202234d58d022ac">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="#94607755c5110d199202234d58d022ac"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14795a36ead1414b4371dbe1a4656359"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="14795a36ead1414b4371dbe1a4656359" args="(Value begin_, Value end_, size_type grainsize_=1)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">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="18d2258400756ac1446dac7676b18df3"></a><!-- doxytag: member="tbb::blocked_range::begin" ref="18d2258400756ac1446dac7676b18df3" args="() const " -->
-<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">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="8b929d93ddc13f148b11bceef3a3bdf8"></a><!-- doxytag: member="tbb::blocked_range::end" ref="8b929d93ddc13f148b11bceef3a3bdf8" args="() const " -->
-<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">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="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of the range.  <a href="#9eaa0b6beff1420f688570bbf6b8c462"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2"></a><!-- doxytag: member="tbb::blocked_range::grainsize" ref="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2" args="() const " -->
-<a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e29e03a31436bad5eb1aa5a9d46a2da"></a><!-- doxytag: member="tbb::atomic::operator=" ref="1e29e03a31436bad5eb1aa5a9d46a2da" args="(T rhs)" -->
+T </td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</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="8f4f02f530eb3f2e7ea26e06f76aef9d"></a><!-- doxytag: member="tbb::blocked_range::empty" ref="8f4f02f530eb3f2e7ea26e06f76aef9d" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">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="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible.  <a href="#41a58b703d574b6e1ca155df3576f578"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00122.html">blocked_range</a> &r, <a class="el" href="a00165.html">split</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#4c0efd2be3f96a0ab3ba5085e8b3fcc7"></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="395a514a55017e36d571809f1223389b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range2d" ref="395a514a55017e36d571809f1223389b" args="" -->
-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="13d172a4da9be197033e64516fff1f4b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range3d" ref="13d172a4da9be197033e64516fff1f4b" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90791297d59b1659cfaf0d93c7cc59ae"></a><!-- doxytag: member="tbb::atomic::operator=" ref="90791297d59b1659cfaf0d93c7cc59ae" args="(const atomic< T > &rhs)" -->
+<a class="el" href="a00122.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00122.html">atomic</a>< T > &rhs)</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="1a8d05842c2b3dfc177bc4d347e4cef7"></a><!-- doxytag: member="tbb::blocked_range::const_iterator" ref="1a8d05842c2b3dfc177bc4d347e4cef7" args="" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef Value <a class="el" href="a00122.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Type of a value. 
-<p>
-Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00122.html">blocked_range</a> as an STL container. 
-</div>
-</div><p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="94607755c5110d199202234d58d022ac"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="94607755c5110d199202234d58d022ac" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00122.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00122.html">blocked_range</a>           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct range with default-constructed values for begin and end. 
-<p>
-Requires that Value have a default constructor. 
-</div>
-</div><p>
-<a class="anchor" name="4c0efd2be3f96a0ab3ba5085e8b3fcc7"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="4c0efd2be3f96a0ab3ba5085e8b3fcc7" args="(blocked_range &r, split)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00122.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00122.html">blocked_range</a>           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00122.html">blocked_range</a>< Value > & </td>
-          <td class="paramname"> <em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="a00165.html">split</a> </td>
-          <td class="paramname"></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a> or !is_divisible(). 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="41a58b703d574b6e1ca155df3576f578"></a><!-- doxytag: member="tbb::blocked_range::is_divisible" ref="41a58b703d574b6e1ca155df3576f578" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00122.html">tbb::blocked_range</a>< Value >::is_divisible           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-True if range is divisible. 
-<p>
-Unspecified if <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
-</div>
-</div><p>
-<a class="anchor" name="9eaa0b6beff1420f688570bbf6b8c462"></a><!-- doxytag: member="tbb::blocked_range::size" ref="9eaa0b6beff1420f688570bbf6b8c462" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Value> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00122.html">tbb::blocked_range</a>< Value >::size           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename T><br>
+ struct tbb::atomic< T ></h3>
 
+Primary template for atomic. 
 <p>
-Size of the range. 
+See the Reference for details. 
 <p>
-Unspecified if <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00266.html">blocked_range.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00266.html">atomic.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00123.html b/doc/html/a00123.html
index 8b958ab..cf9a83d 100644
--- a/doc/html/a00123.html
+++ b/doc/html/a00123.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::atomic< void * > Struct Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,60 +21,30 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00123.html">blocked_range2d</a></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range2d" -->A 2-dimensional range that models the Range concept.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00123.html">atomic< void * ></a></div>
+<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00123.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00267.html">blocked_range2d.h</a>></code>
+<code>#include <<a class="el" href="a00266.html">atomic.h</a>></code>
 <p>
-<a href="a00005.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00003.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="a807a22fe658ec38b8edfd69521d0383"></a><!-- doxytag: member="tbb::blocked_range2d::row_range_type" ref="a807a22fe658ec38b8edfd69521d0383" args="" -->
-typedef <a class="el" href="a00122.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">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="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
-typedef <a class="el" href="a00122.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="4180bc35d4f8ed9f20045dba4f2a1bdc"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4180bc35d4f8ed9f20045dba4f2a1bdc" args="(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)" -->
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="485434db1609b2074d86cb604f3c674e"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="485434db1609b2074d86cb604f3c674e" args="(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
- </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="d144cb2d88cef553420311aca8667a44"></a><!-- doxytag: member="tbb::blocked_range2d::empty" ref="d144cb2d88cef553420311aca8667a44" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">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="ad36a9b38e4fef26d376f99552ce2d92"></a><!-- doxytag: member="tbb::blocked_range2d::is_divisible" ref="ad36a9b38e4fef26d376f99552ce2d92" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">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="4f80e6db02bfa4e90e2a219de9f17461"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4f80e6db02bfa4e90e2a219de9f17461" args="(blocked_range2d &r, split)" -->
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00123.html">blocked_range2d</a> &r, <a class="el" href="a00165.html">split</a>)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f496e7348a82652fba581203477cc07c"></a><!-- doxytag: member="tbb::blocked_range2d::rows" ref="f496e7348a82652fba581203477cc07c" args="() const " -->
-const <a class="el" href="a00122.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba6e74163e255b88c497c40db64c5dad"></a><!-- doxytag: member="tbb::atomic< void * >::operator=" ref="ba6e74163e255b88c497c40db64c5dad" args="(void *rhs)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>operator=</b> (void *rhs)</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="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
-const <a class="el" href="a00122.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="37979e62d1f88eb45bd3ad7df5a140f8"></a><!-- doxytag: member="tbb::atomic< void * >::operator=" ref="37979e62d1f88eb45bd3ad7df5a140f8" args="(const atomic< void * > &rhs)" -->
+<a class="el" href="a00122.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00122.html">atomic</a>< void * > &rhs)</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>
+<h3>template<><br>
+ struct tbb::atomic< void * ></h3>
 
-A 2-dimensional range that models the Range concept. 
+Specialization for <a class="el" href="a00123.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00267.html">blocked_range2d.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00266.html">atomic.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00124.html b/doc/html/a00124.html
index a687046..316d74a 100644
--- a/doc/html/a00124.html
+++ b/doc/html/a00124.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::internal::atomic_backoff Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,67 +21,33 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00124.html">blocked_range3d</a></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range3d" -->A 3-dimensional range that models the Range concept.  
+<a class="el" href="a00237.html">tbb</a>::<b>internal</b>::<a class="el" href="a00124.html">atomic_backoff</a></div>
+<h1>tbb::internal::atomic_backoff Class Reference</h1><!-- doxytag: class="tbb::internal::atomic_backoff" -->Class that implements exponential backoff.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00268.html">blocked_range3d.h</a>></code>
+<code>#include <<a class="el" href="a00394.html">tbb_machine.h</a>></code>
 <p>
-<a href="a00006.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00091.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="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
-typedef <a class="el" href="a00122.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">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="4edc39b1a76c84c8f43ea8bff3e88007"></a><!-- doxytag: member="tbb::blocked_range3d::row_range_type" ref="4edc39b1a76c84c8f43ea8bff3e88007" args="" -->
-typedef <a class="el" href="a00122.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="02229b59d4dc5437bf5fbe72acca7f66"></a><!-- doxytag: member="tbb::blocked_range3d::col_range_type" ref="02229b59d4dc5437bf5fbe72acca7f66" args="" -->
-typedef <a class="el" href="a00122.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="a762f420ed83a887967cb7dfe337582c"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a762f420ed83a887967cb7dfe337582c" args="(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
- </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="0b4dcf5b059634b95c1671086bf6d4ff"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="0b4dcf5b059634b95c1671086bf6d4ff" args="(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_gr [...]
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00122.html#f5707bffea38eee [...]
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="356860e1c977d91711e8216bd55c0b25"></a><!-- doxytag: member="tbb::blocked_range3d::empty" ref="356860e1c977d91711e8216bd55c0b25" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a174ea93e3bd3d5cce82389c2f28d037"></a><!-- doxytag: member="tbb::internal::atomic_backoff::pause" ref="a174ea93e3bd3d5cce82389c2f28d037" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</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"><a class="anchor" name="39d69191721c488e737ae5d9c5336b9c"></a><!-- doxytag: member="tbb::blocked_range3d::is_divisible" ref="39d69191721c488e737ae5d9c5336b9c" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a> () const </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="c6179b19e2e8dedd73a36d523af2fe12"></a><!-- doxytag: member="tbb::internal::atomic_backoff::bounded_pause" ref="c6179b19e2e8dedd73a36d523af2fe12" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>bounded_pause</b> ()</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="a0d6f0085c9fb364ddcbc2197da6c251"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a0d6f0085c9fb364ddcbc2197da6c251" args="(blocked_range3d &r, split)" -->
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00124.html">blocked_range3d</a> &r, <a class="el" href="a00165.html">split</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45edb535489eb0e76ecc59a19fd952de"></a><!-- doxytag: member="tbb::internal::atomic_backoff::reset" ref="45edb535489eb0e76ecc59a19fd952de" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf971430aa12361d3ed245344b7c6764"></a><!-- doxytag: member="tbb::blocked_range3d::pages" ref="cf971430aa12361d3ed245344b7c6764" args="() const " -->
-const <a class="el" href="a00122.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">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="1584623e59ff32a8aa82006827508be4"></a><!-- doxytag: member="tbb::blocked_range3d::rows" ref="1584623e59ff32a8aa82006827508be4" args="() const " -->
-const <a class="el" href="a00122.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">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="3336ba9480fd6c43e158f9beb024c050"></a><!-- doxytag: member="tbb::blocked_range3d::cols" ref="3336ba9480fd6c43e158f9beb024c050" args="() const " -->
-const <a class="el" href="a00122.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">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. 
+Class that implements exponential backoff. 
+<p>
+See implementation of spin_wait_while_eq for an example. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00268.html">blocked_range3d.h</a></ul>
+<li><a class="el" href="a00394.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00125.html b/doc/html/a00125.html
index a1677f2..3440429 100644
--- a/doc/html/a00125.html
+++ b/doc/html/a00125.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::auto_partitioner Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,88 +21,38 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00125.html">cache_aligned_allocator</a></div>
-<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00125.html">auto_partitioner</a></div>
+<h1>tbb::auto_partitioner Class Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::cache_aligned_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::auto_partitioner" -->An auto partitioner.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00269.html">cache_aligned_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00355.html">partitioner.h</a>></code>
 <p>
-<a href="a00007.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="8f7128452e3c43b5bf1801b61d971d17"></a><!-- doxytag: member="tbb::cache_aligned_allocator::value_type" ref="8f7128452e3c43b5bf1801b61d971d17" args="" -->
-typedef internal::allocator_type<<br>
- T >::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</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="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+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="b23ef1d76c34fe1c2ebbb2f3df5b5676"></a><!-- doxytag: member="tbb::cache_aligned_allocator::pointer" ref="b23ef1d76c34fe1c2ebbb2f3df5b5676" args="" -->
-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="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+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="d15affd67eafcabbd12bd1cd07372994"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_pointer" ref="d15affd67eafcabbd12bd1cd07372994" args="" -->
-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="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+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="e8c4e0d5867a07b1cea21d4fca2998c8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::reference" ref="e8c4e0d5867a07b1cea21d4fca2998c8" args="" -->
-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="d3d77a39f0852c42f80c6505843f450c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_reference" ref="d3d77a39f0852c42f80c6505843f450c" args="" -->
-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="90ca6a2979ebee466be771f4c2f9337e"></a><!-- doxytag: member="tbb::cache_aligned_allocator::size_type" ref="90ca6a2979ebee466be771f4c2f9337e" args="" -->
-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="b73eba293d042333f343d025c26751a4"></a><!-- doxytag: member="tbb::cache_aligned_allocator::difference_type" ref="b73eba293d042333f343d025c26751a4" args="" -->
-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="74ccd00a29171ddd61a4ea88cfa49c32"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="74ccd00a29171ddd61a4ea88cfa49c32" args="(const cache_aligned_allocator &)" -->
- </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00125.html">cache_aligned_allocator</a> &)  throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="de57e731c36a51bf39b458c9b8adee58"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="de57e731c36a51bf39b458c9b8adee58" args="(const cache_aligned_allocator< U > &)" -->
-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="a00125.html">cache_aligned_allocator</a>< U > &)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="023e0cc7cf6ebde69e1f2c12182eb12b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="023e0cc7cf6ebde69e1f2c12182eb12b" args="(reference x) const " -->
-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="db4f7613b1de12d1e79285c15636cf3b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="db4f7613b1de12d1e79285c15636cf3b" args="(const_reference x) const " -->
-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="4cdeea67af6c1fcd8f1d5e9c4cab61e8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::allocate" ref="4cdeea67af6c1fcd8f1d5e9c4cab61e8" args="(size_type n, const void *hint=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a> (size_type n, const void *hint=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="3d4eadf188f7d85d3805ae534e0b8e1c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::deallocate" ref="3d4eadf188f7d85d3805ae534e0b8e1c" args="(pointer p, size_type)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">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="fb23b687b4c0429dab4c7f8017266cf0"></a><!-- doxytag: member="tbb::cache_aligned_allocator::max_size" ref="fb23b687b4c0429dab4c7f8017266cf0" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">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="958ee8745c86c275bfc9533af565e017"></a><!-- doxytag: member="tbb::cache_aligned_allocator::construct" ref="958ee8745c86c275bfc9533af565e017" args="(pointer p, const value_type &value)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a> (pointer p, const value_type &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="cd298895a4f1654b5149ec84b591ecb5"></a><!-- doxytag: member="tbb::cache_aligned_allocator::destroy" ref="cd298895a4f1654b5149ec84b591ecb5" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>partition_type</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::cache_aligned_allocator< T ></h3>
-
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+An auto partitioner. 
 <p>
-The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+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="a00269.html">cache_aligned_allocator.h</a></ul>
+<li><a class="el" href="a00355.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00126.html b/doc/html/a00126.html
index 80a1393..bd623a0 100644
--- a/doc/html/a00126.html
+++ b/doc/html/a00126.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::bad_last_alloc Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,46 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00126.html">cache_aligned_allocator< void ></a></div>
-<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::cache_aligned_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00126.html">bad_last_alloc</a></div>
+<h1>tbb::bad_last_alloc Class Reference</h1><!-- doxytag: class="tbb::bad_last_alloc" -->Exception for concurrent containers.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00269.html">cache_aligned_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00009.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>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce89776145998f0685a767b4f195272d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::pointer" ref="ce89776145998f0685a767b4f195272d" args="" -->
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</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="ec7a57742ff4dc214266179d88984015"></a><!-- doxytag: member="tbb::bad_last_alloc::what" ref="ec7a57742ff4dc214266179d88984015" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4431fbbe1a8cfeb19c48ad0072078f45"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::const_pointer" ref="4431fbbe1a8cfeb19c48ad0072078f45" args="" -->
-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="2ab296f4ecdd75f8e193ff92004a697d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::value_type" ref="2ab296f4ecdd75f8e193ff92004a697d" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></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>rebind</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">~bad_last_alloc</a> ()  throw ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::cache_aligned_allocator< void ></h3>
+Exception for concurrent containers. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="af817b8268cabc44ecd9c9ef986f6192"></a><!-- doxytag: member="tbb::bad_last_alloc::~bad_last_alloc" ref="af817b8268cabc44ecd9c9ef986f6192" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::bad_last_alloc::~bad_last_alloc           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
+Necessary to avoid ICL error: "exception specification for implicitly declared virtual is incompatible with that of overridden function". 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00269.html">cache_aligned_allocator.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00127.html b/doc/html/a00127.html
index 92754a4..81c9ca1 100644
--- a/doc/html/a00127.html
+++ b/doc/html/a00127.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::captured_exception Class Reference</title>
+<title>tbb::blocked_range< Value > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,128 +21,198 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00127.html">captured_exception</a></div>
-<h1>tbb::captured_exception Class Reference</h1><!-- doxytag: class="tbb::captured_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->This class is used by TBB to propagate information about unhandled exceptions into the root thread.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00127.html">blocked_range</a></div>
+<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<small>
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range" -->A range over which to iterate.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00274.html">blocked_range.h</a>></code>
 <p>
-Inherits <a class="el" href="a00172.html">tbb::tbb_exception</a>.
-<p>
-Inheritance diagram for tbb::captured_exception:<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">
+<a href="a00004.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="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a value.  <a href="#1a8d05842c2b3dfc177bc4d347e4cef7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5707bffea38eee5c9680f37358afb8e"></a><!-- doxytag: member="tbb::blocked_range::size_type" ref="f5707bffea38eee5c9680f37358afb8e" args="" -->
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">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"><a class="anchor" name="b50d9716bcdd281df574ec758a3952f9"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="b50d9716bcdd281df574ec758a3952f9" args="(const captured_exception &src)" -->
- </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00127.html">captured_exception</a> &src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#94607755c5110d199202234d58d022ac">blocked_range</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ac89d457be837a19a3d505050f3a4e8"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="2ac89d457be837a19a3d505050f3a4e8" args="(const char *name, const char *info)" -->
- </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name, const char *info)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct range with default-constructed values for begin and end.  <a href="#94607755c5110d199202234d58d022ac"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14795a36ead1414b4371dbe1a4656359"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="14795a36ead1414b4371dbe1a4656359" args="(Value begin_, Value end_, size_type grainsize_=1)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e95b8eb99ec9dea22934ac528a08654c"></a><!-- doxytag: member="tbb::captured_exception::operator=" ref="e95b8eb99ec9dea22934ac528a08654c" args="(const captured_exception &src)" -->
-<a class="el" href="a00127.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00127.html">captured_exception</a> &src)</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="18d2258400756ac1446dac7676b18df3"></a><!-- doxytag: member="tbb::blocked_range::begin" ref="18d2258400756ac1446dac7676b18df3" args="() const " -->
+<a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00127.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">move</a> ()  throw ()</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="8b929d93ddc13f148b11bceef3a3bdf8"></a><!-- doxytag: member="tbb::blocked_range::end" ref="8b929d93ddc13f148b11bceef3a3bdf8" args="() const " -->
+<a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#837a50b8f6a800bda225c39d1699643f"></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="a00127.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</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="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">move()</a> method.  <a href="#93d875d3555502ff6f18513525de204c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of the range.  <a href="#9eaa0b6beff1420f688570bbf6b8c462"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2"></a><!-- doxytag: member="tbb::blocked_range::grainsize" ref="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2" args="() const " -->
+<a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#2dd1be66ab32fa27e0ddef5707fa67ef"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af82fd677449c5ca727fa1d7e16f9f5"></a><!-- doxytag: member="tbb::captured_exception::name" ref="5af82fd677449c5ca727fa1d7e16f9f5" args="() const " -->
-const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a> () const   throw ()</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="8f4f02f530eb3f2e7ea26e06f76aef9d"></a><!-- doxytag: member="tbb::blocked_range::empty" ref="8f4f02f530eb3f2e7ea26e06f76aef9d" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a> () const </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="6b5988ef74a1fe2a58998d110b3633e0"></a><!-- doxytag: member="tbb::captured_exception::what" ref="6b5988ef74a1fe2a58998d110b3633e0" args="() const " -->
-const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a> () const   throw ()</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="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what()</a> method. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="92ed4100413eef26969f8299f6845e18"></a><!-- doxytag: member="tbb::captured_exception::set" ref="92ed4100413eef26969f8299f6845e18" args="(const char *name, const char *info)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set</b> (const char *name, const char *info)  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible.  <a href="#41a58b703d574b6e1ca155df3576f578"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00127.html">blocked_range</a> &r, <a class="el" href="a00173.html">split</a>)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5f56d05102acdba6c2f09ba6db3baeb"></a><!-- doxytag: member="tbb::captured_exception::clear" ref="d5f56d05102acdba6c2f09ba6db3baeb" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>clear</b> ()  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range.  <a href="#4c0efd2be3f96a0ab3ba5085e8b3fcc7"></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="395a514a55017e36d571809f1223389b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range2d" ref="395a514a55017e36d571809f1223389b" args="" -->
+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="13d172a4da9be197033e64516fff1f4b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range3d" ref="13d172a4da9be197033e64516fff1f4b" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-This class is used by TBB to propagate information about unhandled exceptions into the root thread. 
+<h3>template<typename Value><br>
+ class tbb::blocked_range< Value ></h3>
+
+A range over which to iterate. 
 <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="a00172.html">tbb::tbb_exception</a> </dd></dl>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="1a8d05842c2b3dfc177bc4d347e4cef7"></a><!-- doxytag: member="tbb::blocked_range::const_iterator" ref="1a8d05842c2b3dfc177bc4d347e4cef7" args="" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef Value <a class="el" href="a00127.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
 <p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="93d875d3555502ff6f18513525de204c"></a><!-- doxytag: member="tbb::captured_exception::destroy" ref="93d875d3555502ff6f18513525de204c" args="()" -->
+Type of a value. 
+<p>
+Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00127.html">blocked_range</a> as an STL container. 
+</div>
+</div><p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="94607755c5110d199202234d58d022ac"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="94607755c5110d199202234d58d022ac" args="()" -->
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy           </td>
+          <td class="memname"><a class="el" href="a00127.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00127.html">blocked_range</a>           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Destroys objects created by the <a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">move()</a> method. 
+Construct range with default-constructed values for begin and end. 
 <p>
-Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. 
+Requires that Value have a default constructor. 
+</div>
+</div><p>
+<a class="anchor" name="4c0efd2be3f96a0ab3ba5085e8b3fcc7"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="4c0efd2be3f96a0ab3ba5085e8b3fcc7" args="(blocked_range &r, split)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00127.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00127.html">blocked_range</a>           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00127.html">blocked_range</a>< Value > & </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00173.html">split</a> </td>
+          <td class="paramname"></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-Implements <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+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="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin()</a> or !is_divisible(). 
 </div>
 </div><p>
-<a class="anchor" name="837a50b8f6a800bda225c39d1699643f"></a><!-- doxytag: member="tbb::captured_exception::move" ref="837a50b8f6a800bda225c39d1699643f" args="()" -->
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="41a58b703d574b6e1ca155df3576f578"></a><!-- doxytag: member="tbb::blocked_range::is_divisible" ref="41a58b703d574b6e1ca155df3576f578" args="() const " -->
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00127.html">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move           </td>
+          <td class="memname">bool <a class="el" href="a00127.html">tbb::blocked_range</a>< Value >::is_divisible           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [virtual]</code></td>
+          <td width="100%"> const<code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Creates and returns pointer to the deep copy of this exception object. 
+True if range is divisible. 
 <p>
-Move semantics is allowed. 
-<p>
-Implements <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+Unspecified if <a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
 </div>
 </div><p>
-<a class="anchor" name="2dd1be66ab32fa27e0ddef5707fa67ef"></a><!-- doxytag: member="tbb::captured_exception::throw_self" ref="2dd1be66ab32fa27e0ddef5707fa67ef" args="()" -->
+<a class="anchor" name="9eaa0b6beff1420f688570bbf6b8c462"></a><!-- doxytag: member="tbb::blocked_range::size" ref="9eaa0b6beff1420f688570bbf6b8c462" args="() const " -->
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename Value> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void tbb::captured_exception::throw_self           </td>
+          <td class="memname"><a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00127.html">tbb::blocked_range</a>< Value >::size           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
+          <td width="100%"> const<code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <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. 
+Size of the range. 
 <p>
-Implements <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+Unspecified if <a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00274.html">blocked_range.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00128.html b/doc/html/a00128.html
index 54edb83..dc68ab8 100644
--- a/doc/html/a00128.html
+++ b/doc/html/a00128.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::combinable< T > Class Template Reference</title>
+<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,58 +21,60 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00128.html">combinable</a></div>
-<h1>tbb::combinable< T > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00128.html">blocked_range2d</a></div>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
 <small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::combinable" -->Thread-local storage with optional reduction.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range2d" -->A 2-dimensional range that models the Range concept.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00271.html">combinable.h</a>></code>
+<code>#include <<a class="el" href="a00275.html">blocked_range2d.h</a>></code>
 <p>
-<a href="a00011.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00005.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="memTemplParams" nowrap colspan="2"><a class="anchor" name="d03619e90e62555aa5634fcc8adadcc9"></a><!-- doxytag: member="tbb::combinable::combinable" ref="d03619e90e62555aa5634fcc8adadcc9" args="(finit _finit)" -->
-template<typename finit> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>combinable</b> (finit _finit)</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="a807a22fe658ec38b8edfd69521d0383"></a><!-- doxytag: member="tbb::blocked_range2d::row_range_type" ref="a807a22fe658ec38b8edfd69521d0383" args="" -->
+typedef <a class="el" href="a00127.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c87e79ae98588a5780f708773388843"></a><!-- doxytag: member="tbb::combinable::~combinable" ref="2c87e79ae98588a5780f708773388843" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</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="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
+typedef <a class="el" href="a00127.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></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="57012803b7bc7416452cb930121ff210"></a><!-- doxytag: member="tbb::combinable::combinable" ref="57012803b7bc7416452cb930121ff210" args="(const combinable &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>combinable</b> (const <a class="el" href="a00128.html">combinable</a> &other)</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="4180bc35d4f8ed9f20045dba4f2a1bdc"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4180bc35d4f8ed9f20045dba4f2a1bdc" args="(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)" -->
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c9650d59f65b1042afa232ede57dfca9"></a><!-- doxytag: member="tbb::combinable::operator=" ref="c9650d59f65b1042afa232ede57dfca9" args="(const combinable &other)" -->
-<a class="el" href="a00128.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00128.html">combinable</a> &other)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="485434db1609b2074d86cb604f3c674e"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="485434db1609b2074d86cb604f3c674e" args="(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
+ </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="f09233cccb9b5e8a58874e43a703cac2"></a><!-- doxytag: member="tbb::combinable::clear" ref="f09233cccb9b5e8a58874e43a703cac2" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d144cb2d88cef553420311aca8667a44"></a><!-- doxytag: member="tbb::blocked_range2d::empty" ref="d144cb2d88cef553420311aca8667a44" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#d144cb2d88cef553420311aca8667a44">empty</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d7550204bcb88fa8810b5a39e9cad24"></a><!-- doxytag: member="tbb::combinable::local" ref="2d7550204bcb88fa8810b5a39e9cad24" args="()" -->
-T & </td><td class="memItemRight" valign="bottom"><b>local</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="ad36a9b38e4fef26d376f99552ce2d92"></a><!-- doxytag: member="tbb::blocked_range2d::is_divisible" ref="ad36a9b38e4fef26d376f99552ce2d92" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93a42052881ecccdd8ddff16a1b1cca1"></a><!-- doxytag: member="tbb::combinable::local" ref="93a42052881ecccdd8ddff16a1b1cca1" args="(bool &exists)" -->
-T & </td><td class="memItemRight" valign="bottom"><b>local</b> (bool &exists)</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="4f80e6db02bfa4e90e2a219de9f17461"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4f80e6db02bfa4e90e2a219de9f17461" args="(blocked_range2d &r, split)" -->
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00128.html">blocked_range2d</a> &r, <a class="el" href="a00173.html">split</a>)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb0ebff0036225d81917591355c0e5b6"></a><!-- doxytag: member="tbb::combinable::combine" ref="fb0ebff0036225d81917591355c0e5b6" args="(FCombine fcombine)" -->
-template<typename FCombine> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (FCombine fcombine)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f496e7348a82652fba581203477cc07c"></a><!-- doxytag: member="tbb::blocked_range2d::rows" ref="f496e7348a82652fba581203477cc07c" args="() const " -->
+const <a class="el" href="a00127.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#f496e7348a82652fba581203477cc07c">rows</a> () const </td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2b76467e3c6657878e681b916aa40f86"></a><!-- doxytag: member="tbb::combinable::combine_each" ref="2b76467e3c6657878e681b916aa40f86" args="(FCombine fcombine)" -->
-template<typename FCombine> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (FCombine fcombine)</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="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
+const <a class="el" href="a00127.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#392a46759af2c884957115771affa7f4">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 T><br>
- class tbb::combinable< T ></h3>
+<h3>template<typename RowValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range2d< RowValue, ColValue ></h3>
 
-Thread-local storage with optional reduction. 
+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="a00271.html">combinable.h</a></ul>
+<li><a class="el" href="a00275.html">blocked_range2d.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00129.html b/doc/html/a00129.html
index 8c1a6bc..9af5159 100644
--- a/doc/html/a00129.html
+++ b/doc/html/a00129.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_bounded_queue< T, A > Class Template Reference</title>
+<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,277 +21,67 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00129.html">concurrent_bounded_queue</a></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00129.html">blocked_range3d</a></div>
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
 <small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range3d" -->A 3-dimensional range that models the Range concept.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00282.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00276.html">blocked_range3d.h</a>></code>
 <p>
-Inherited by <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>.
-<p>
-Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00019.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00006.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="98245517a931e5893f6601e66c51fc75"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::value_type" ref="98245517a931e5893f6601e66c51fc75" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">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="2e2726fccf6d975dc1071608cc0bbf90"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::allocator_type" ref="2e2726fccf6d975dc1071608cc0bbf90" args="" -->
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">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="dcd44ca6a88c0dc7a847a47a10811f0c"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::reference" ref="dcd44ca6a88c0dc7a847a47a10811f0c" args="" -->
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">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="796713d0b9ba93a4721cbe13e4474068"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_reference" ref="796713d0b9ba93a4721cbe13e4474068" args="" -->
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">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="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
+typedef <a class="el" href="a00127.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue.  <a href="#a80e4c11dbb324e4b92a24a77bbcde68"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b45c91297e69515d83d5eef85ae1f49"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::difference_type" ref="4b45c91297e69515d83d5eef85ae1f49" args="" -->
-typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_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="4edc39b1a76c84c8f43ea8bff3e88007"></a><!-- doxytag: member="tbb::blocked_range3d::row_range_type" ref="4edc39b1a76c84c8f43ea8bff3e88007" args="" -->
+typedef <a class="el" href="a00127.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><b>row_range_type</b></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="aeea2ad38b7e7fc2866f063dfed24c52"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::iterator" ref="aeea2ad38b7e7fc2866f063dfed24c52" args="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00129.html">concurrent_bounded_queue</a>,<br>
- 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="0edd1a90e6ffa503bac1c4027116dbff"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_iterator" ref="0edd1a90e6ffa503bac1c4027116dbff" args="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00129.html">concurrent_bounded_queue</a>,<br>
- const 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="02229b59d4dc5437bf5fbe72acca7f66"></a><!-- doxytag: member="tbb::blocked_range3d::col_range_type" ref="02229b59d4dc5437bf5fbe72acca7f66" args="" -->
+typedef <a class="el" href="a00127.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="e3525226732963ff0f13e89d8e6dab5b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="e3525226732963ff0f13e89d8e6dab5b" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">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="7b7fb414d2eaa8a7f5d68fc4cd63ac50"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="7b7fb414d2eaa8a7f5d68fc4cd63ac50" args="(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00129.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">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="a5e04dcd7db9fd9b583b4e7df832246a"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="a5e04dcd7db9fd9b583b4e7df832246a" args="(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())" -->
-template<typename InputIterator> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acaf5b510dc0dfc7780b8c956cf773cf"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::~concurrent_bounded_queue" ref="acaf5b510dc0dfc7780b8c956cf773cf" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_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="ceb08c743b11ba88c878e73fff8af20b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::push" ref="ceb08c743b11ba88c878e73fff8af20b" args="(const T &source)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a> (const T &source)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a762f420ed83a887967cb7dfe337582c"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a762f420ed83a887967cb7dfe337582c" args="(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
+ </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">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="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a> (T &destination)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b4dcf5b059634b95c1671086bf6d4ff"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="0b4dcf5b059634b95c1671086bf6d4ff" args="(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_gr [...]
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00127.html#f5707bffea38eee [...]
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue.  <a href="#41f4c6bd7a82ab070e840bbf81b0b123"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a> (const T &source)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="356860e1c977d91711e8216bd55c0b25"></a><!-- doxytag: member="tbb::blocked_range3d::empty" ref="356860e1c977d91711e8216bd55c0b25" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#356860e1c977d91711e8216bd55c0b25">empty</a> () const </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="#2bd6232531279fb3ccbd296bea23066b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a> (T &destination)</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="39d69191721c488e737ae5d9c5336b9c"></a><!-- doxytag: member="tbb::blocked_range3d::is_divisible" ref="39d69191721c488e737ae5d9c5336b9c" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#0ca487019bbb00a196442aff78a1e4f7"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</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="a0d6f0085c9fb364ddcbc2197da6c251"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a0d6f0085c9fb364ddcbc2197da6c251" args="(blocked_range3d &r, split)" -->
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00129.html">blocked_range3d</a> &r, <a class="el" href="a00173.html">split</a>)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops.  <a href="#7dc14d1a579a4cccda9f857585e1768d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f64924f2ee9225c368a270fc3c394db9"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::empty" ref="f64924f2ee9225c368a270fc3c394db9" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf971430aa12361d3ed245344b7c6764"></a><!-- doxytag: member="tbb::blocked_range3d::pages" ref="cf971430aa12361d3ed245344b7c6764" args="() const " -->
+const <a class="el" href="a00127.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#cf971430aa12361d3ed245344b7c6764">pages</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size()</a><=0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2888b3e4e837d7e03f2c731963a402b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::capacity" ref="b2888b3e4e837d7e03f2c731963a402b" args="() const " -->
-<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</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="1584623e59ff32a8aa82006827508be4"></a><!-- doxytag: member="tbb::blocked_range3d::rows" ref="1584623e59ff32a8aa82006827508be4" args="() const " -->
+const <a class="el" href="a00127.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#1584623e59ff32a8aa82006827508be4">rows</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="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a> (<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> capacity)</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="3336ba9480fd6c43e158f9beb024c050"></a><!-- doxytag: member="tbb::blocked_range3d::cols" ref="3336ba9480fd6c43e158f9beb024c050" args="() const " -->
+const <a class="el" href="a00127.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">cols</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#089f33dfd504e30a95f40ed2a5799367"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="415eb87e53b1c6a266de06ecbc490d16"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::get_allocator" ref="415eb87e53b1c6a266de06ecbc490d16" args="() const " -->
-<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">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="90b31e2954c6e4596c7900435a5f4bc1"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::clear" ref="90b31e2954c6e4596c7900435a5f4bc1" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">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="5a2637188e104503ac2c0dff633014e8"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="5a2637188e104503ac2c0dff633014e8" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c7267334ef11087c76c810abb9d5cbc2"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="c7267334ef11087c76c810abb9d5cbc2" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8be757841d0bbf7744508aaf6a141d08"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="8be757841d0bbf7744508aaf6a141d08" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3aac91d288bf227d9d06717b44ef28f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="3aac91d288bf227d9d06717b44ef28f7" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_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="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></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"><b>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="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 T, class A = cache_aligned_allocator<T>><br>
- class tbb::concurrent_bounded_queue< T, A ></h3>
+<h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
 
-A high-performance thread-safe blocking concurrent bounded queue. 
-<p>
-This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
-<p>
-<hr><h2>Member Typedef Documentation</h2>
-<a class="anchor" name="a80e4c11dbb324e4b92a24a77bbcde68"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size_type" ref="a80e4c11dbb324e4b92a24a77bbcde68" args="" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="41f4c6bd7a82ab070e840bbf81b0b123"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::pop" ref="41f4c6bd7a82ab070e840bbf81b0b123" args="(T &destination)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::pop           </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>destination</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Dequeue item from head of queue. 
-<p>
-Block until an item becomes available, and then dequeue it. 
-</div>
-</div><p>
-<a class="anchor" name="089f33dfd504e30a95f40ed2a5799367"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="089f33dfd504e30a95f40ed2a5799367" args="(size_type capacity)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td>
-          <td class="paramname"> <em>capacity</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Set the capacity. 
-<p>
-Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. 
-</div>
-</div><p>
-<a class="anchor" name="7dc14d1a579a4cccda9f857585e1768d"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size" ref="7dc14d1a579a4cccda9f857585e1768d" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::size           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity()</a> if there are push operations in flight. 
-</div>
-</div><p>
-<a class="anchor" name="0ca487019bbb00a196442aff78a1e4f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_pop" ref="0ca487019bbb00a196442aff78a1e4f7" args="(T &destination)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::try_pop           </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>destination</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="2bd6232531279fb3ccbd296bea23066b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_push" ref="2bd6232531279fb3ccbd296bea23066b" args="(const T &source)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push           </td>
-          <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"> <em>source</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Enqueue an item at tail of queue if queue is not already full. 
+A 3-dimensional range that models the Range concept. 
 <p>
-Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00282.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00276.html">blocked_range3d.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00130.html b/doc/html/a00130.html
index 918a6ab..1b85bc3 100644
--- a/doc/html/a00130.html
+++ b/doc/html/a00130.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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, Allocator > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,589 +21,88 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00130.html">cache_aligned_allocator</a></div>
+<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
 <small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_hash_map" -->Unordered map from Key to T.  
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::cache_aligned_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00272.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00277.html">cache_aligned_allocator.h</a>></code>
 <p>
-<a href="a00013.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00007.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="a59325d5213bdbb32e66525364d9ca6e"></a><!-- doxytag: member="tbb::concurrent_hash_map::key_type" ref="a59325d5213bdbb32e66525364d9ca6e" args="" -->
-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="8f7128452e3c43b5bf1801b61d971d17"></a><!-- doxytag: member="tbb::cache_aligned_allocator::value_type" ref="8f7128452e3c43b5bf1801b61d971d17" args="" -->
+typedef internal::allocator_type<<br>
+ T >::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="d30555ca958fcf4401d8c46e32b35832"></a><!-- doxytag: member="tbb::concurrent_hash_map::mapped_type" ref="d30555ca958fcf4401d8c46e32b35832" args="" -->
-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="ba7dfe412706706fc77eeb9ca106dd77"></a><!-- doxytag: member="tbb::concurrent_hash_map::value_type" ref="ba7dfe412706706fc77eeb9ca106dd77" args="" -->
-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="3ca1134a52ba7d888f7b928adbded48e"></a><!-- doxytag: member="tbb::concurrent_hash_map::size_type" ref="3ca1134a52ba7d888f7b928adbded48e" args="" -->
-typedef internal::hash_map_base::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="156eff4cfda20255ab61594772322632"></a><!-- doxytag: member="tbb::concurrent_hash_map::difference_type" ref="156eff4cfda20255ab61594772322632" args="" -->
-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="9efc6155cc67220afe493d5ba86da474"></a><!-- doxytag: member="tbb::concurrent_hash_map::pointer" ref="9efc6155cc67220afe493d5ba86da474" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b23ef1d76c34fe1c2ebbb2f3df5b5676"></a><!-- doxytag: member="tbb::cache_aligned_allocator::pointer" ref="b23ef1d76c34fe1c2ebbb2f3df5b5676" args="" -->
 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="1de4baea4800c9422497160c2dc6ee88"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_pointer" ref="1de4baea4800c9422497160c2dc6ee88" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d15affd67eafcabbd12bd1cd07372994"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_pointer" ref="d15affd67eafcabbd12bd1cd07372994" args="" -->
 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="7f4e03ecea778f011ab7c3c0b61d2521"></a><!-- doxytag: member="tbb::concurrent_hash_map::reference" ref="7f4e03ecea778f011ab7c3c0b61d2521" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8c4e0d5867a07b1cea21d4fca2998c8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::reference" ref="e8c4e0d5867a07b1cea21d4fca2998c8" args="" -->
 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="9fa6589f474a5b2f770ee12ab9965b35"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_reference" ref="9fa6589f474a5b2f770ee12ab9965b35" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d3d77a39f0852c42f80c6505843f450c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_reference" ref="d3d77a39f0852c42f80c6505843f450c" args="" -->
 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="e0a1323016e3475bf8a5ed8952f84b53"></a><!-- doxytag: member="tbb::concurrent_hash_map::iterator" ref="e0a1323016e3475bf8a5ed8952f84b53" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00130.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="2380701b85fb373abfe1c20d4044cc47"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_iterator" ref="2380701b85fb373abfe1c20d4044cc47" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00130.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="90ca6a2979ebee466be771f4c2f9337e"></a><!-- doxytag: member="tbb::cache_aligned_allocator::size_type" ref="90ca6a2979ebee466be771f4c2f9337e" args="" -->
+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="0f251ff63b9ee8ef88bac1452de92618"></a><!-- doxytag: member="tbb::concurrent_hash_map::range_type" ref="0f251ff63b9ee8ef88bac1452de92618" args="" -->
-typedef internal::hash_map_range<<br>
- iterator > </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="e91c41ef86638719f1e4fb44cc936ed2"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_range_type" ref="e91c41ef86638719f1e4fb44cc936ed2" args="" -->
-typedef internal::hash_map_range<<br>
- const_iterator > </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="dd223032ecd376e846b6724e168bdc56"></a><!-- doxytag: member="tbb::concurrent_hash_map::allocator_type" ref="dd223032ecd376e846b6724e168bdc56" args="" -->
-typedef Allocator </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="b73eba293d042333f343d025c26751a4"></a><!-- doxytag: member="tbb::cache_aligned_allocator::difference_type" ref="b73eba293d042333f343d025c26751a4" args="" -->
+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="342582ba05d9fb893ed80875d2b7a42f"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="342582ba05d9fb893ed80875d2b7a42f" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">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="c1bf3c669935aceb1dc0169e3a19e0be"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="c1bf3c669935aceb1dc0169e3a19e0be" args="(size_type n, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#c1bf3c669935aceb1dc0169e3a19e0be">concurrent_hash_map</a> (size_type n, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc50f7bca65d0c27cbf5c31d2fa63eac"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="bc50f7bca65d0c27cbf5c31d2fa63eac" args="(const concurrent_hash_map &table, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a> (const <a class="el" href="a00130.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="b5132202dff9ee3d619bef6b1d84edea"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="b5132202dff9ee3d619bef6b1d84edea" args="(I first, I last, const allocator_type &a=allocator_type())" -->
-template<typename I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">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="adadeb9d1acb8c3b34517435666cf297"></a><!-- doxytag: member="tbb::concurrent_hash_map::operator=" ref="adadeb9d1acb8c3b34517435666cf297" args="(const concurrent_hash_map &table)" -->
-<a class="el" href="a00130.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=</a> (const <a class="el" href="a00130.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="36bcd50fd5383f3682032323b2d74333"></a><!-- doxytag: member="tbb::concurrent_hash_map::clear" ref="36bcd50fd5383f3682032323b2d74333" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">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="5e96649f71f68f3b6bf3b1eee6b441a7"></a><!-- doxytag: member="tbb::concurrent_hash_map::~concurrent_hash_map" ref="5e96649f71f68f3b6bf3b1eee6b441a7" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">~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="e0f51b807e124c2bee274c5f86a2a817"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="e0f51b807e124c2bee274c5f86a2a817" args="(size_type grainsize=1)" -->
-range_type </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="78989fb98b211ab5f8437798d490e004"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="78989fb98b211ab5f8437798d490e004" args="(size_type grainsize=1) const " -->
-const_range_type </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="dfb7ab010b46fc194673256479c2ea48"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="dfb7ab010b46fc194673256479c2ea48" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2dd7c8b3d37a93ba551e4de33bb73d"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="7e2dd7c8b3d37a93ba551e4de33bb73d" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="be53487f364b5744187af9f7627c3190"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="be53487f364b5744187af9f7627c3190" args="() const " -->
-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="6b947898d1a60b680d8c4f915442e1a8"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="6b947898d1a60b680d8c4f915442e1a8" args="() const " -->
-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="3b6f066f9b1e51eaefa67c37928a6d5f"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="3b6f066f9b1e51eaefa67c37928a6d5f" args="(const Key &key)" -->
-std::pair< iterator, iterator > </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="9d1d5f33f2babb6780794c9ed6193174"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="9d1d5f33f2babb6780794c9ed6193174" args="(const Key &key) const " -->
-std::pair< const_iterator,<br>
- const_iterator > </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"><a class="anchor" name="25b0e3881038877604c5efc1c14c4afd"></a><!-- doxytag: member="tbb::concurrent_hash_map::size" ref="25b0e3881038877604c5efc1c14c4afd" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e5d085375320cd3f34faeedc5bba8f6"></a><!-- doxytag: member="tbb::concurrent_hash_map::empty" ref="3e5d085375320cd3f34faeedc5bba8f6" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size()</a>==0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6ed260e217fb310050928d7bd03f1b5e"></a><!-- doxytag: member="tbb::concurrent_hash_map::max_size" ref="6ed260e217fb310050928d7bd03f1b5e" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">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="79d1e5c3b975dbd38b43138266fe4c0e"></a><!-- doxytag: member="tbb::concurrent_hash_map::get_allocator" ref="79d1e5c3b975dbd38b43138266fe4c0e" args="() const " -->
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">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="dd73f70aa6602021ea2c56bac9715353"></a><!-- doxytag: member="tbb::concurrent_hash_map::swap" ref="dd73f70aa6602021ea2c56bac9715353" args="(concurrent_hash_map &table)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap</a> (<a class="el" href="a00130.html">concurrent_hash_map</a> &table)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances. Iterators are invalidated <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3e97a1f3cb66e81a2336b013ef1ae7d"></a><!-- doxytag: member="tbb::concurrent_hash_map::count" ref="a3e97a1f3cb66e81a2336b013ef1ae7d" args="(const Key &key) const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">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="a00130.html#9fa1ca60af4ef761a100617b27718585">find</a> (<a class="el" href="a00133.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="#9fa1ca60af4ef761a100617b27718585"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a> (<a class="el" href="a00131.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="#4f7cc0aab2d8216c0a6e681f32dd48c8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert</a> (<a class="el" href="a00133.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="#67d8c254b1666d89267c8a4a33c864f3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#8ea81ff7fea044f859273b354c91c185">insert</a> (<a class="el" href="a00131.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="#8ea81ff7fea044f859273b354c91c185"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a> (<a class="el" href="a00133.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="#68a46a26bd4308c1780d021ca7e8fc15"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a> (<a class="el" href="a00131.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="#7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#3034a308bc839695a5714a107380c4b9">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="#3034a308bc839695a5714a107380c4b9"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7b42dba04d71e1367f0d542087906178"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7b42dba04d71e1367f0d542087906178" args="(I first, I last)" -->
-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="a00130.html#7b42dba04d71e1367f0d542087906178">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="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a> (const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#58df7a1e4373c55eb4c2fa9dc69516b1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">erase</a> (<a class="el" href="a00133.html">const_accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00133.html">const_accessor</a>.  <a href="#fc64086f9f518cef8c368c9429d0064e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">erase</a> (<a class="el" href="a00131.html">accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#b65abfa291da566617dd58dfb349630a"></a><br></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="4a66e22918752bb0d7c22333bec7e0d6"></a><!-- doxytag: member="tbb::concurrent_hash_map::node_allocator_type" ref="4a66e22918752bb0d7c22333bec7e0d6" args="" -->
-typedef Allocator::template <br>
-rebind< node >::other </td><td class="memItemRight" valign="bottom"><b>node_allocator_type</b></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="572fec6cb2b0d70b8a3a12c5be4df6d4"></a><!-- doxytag: member="tbb::concurrent_hash_map::delete_node" ref="572fec6cb2b0d70b8a3a12c5be4df6d4" args="(node_base *n)" -->
-void </td><td class="memItemRight" valign="bottom"><b>delete_node</b> (node_base *n)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="74ccd00a29171ddd61a4ea88cfa49c32"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="74ccd00a29171ddd61a4ea88cfa49c32" args="(const cache_aligned_allocator &)" -->
+ </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00130.html">cache_aligned_allocator</a> &)  throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="058f1d5e2075d11c9b2ac00f1f0ae60e"></a><!-- doxytag: member="tbb::concurrent_hash_map::search_bucket" ref="058f1d5e2075d11c9b2ac00f1f0ae60e" args="(const key_type &key, bucket *b) const " -->
-node * </td><td class="memItemRight" valign="bottom"><b>search_bucket</b> (const key_type &key, bucket *b) const </td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="de57e731c36a51bf39b458c9b8adee58"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="de57e731c36a51bf39b458c9b8adee58" args="(const cache_aligned_allocator< U > &)" -->
+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="a00130.html">cache_aligned_allocator</a>< U > &)  throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f2fe44bde2158a2f2a315c6457ebd030"></a><!-- doxytag: member="tbb::concurrent_hash_map::rehash_bucket" ref="f2fe44bde2158a2f2a315c6457ebd030" args="(bucket *b_new, const hashcode_t h)" -->
-void </td><td class="memItemRight" valign="bottom"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="023e0cc7cf6ebde69e1f2c12182eb12b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="023e0cc7cf6ebde69e1f2c12182eb12b" args="(reference x) const " -->
+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="0f0ba43d9cb783f12dd01bf5677da097"></a><!-- doxytag: member="tbb::concurrent_hash_map::lookup" ref="0f0ba43d9cb783f12dd01bf5677da097" args="(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00133.html">const_accessor</a> *result, bool write)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db4f7613b1de12d1e79285c15636cf3b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="db4f7613b1de12d1e79285c15636cf3b" args="(const_reference x) const " -->
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert or find item and optionally acquire a lock on the item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="671965989ffb5f6084c776cb0bb6cdab"></a><!-- doxytag: member="tbb::concurrent_hash_map::exclude" ref="671965989ffb5f6084c776cb0bb6cdab" args="(const_accessor &item_accessor, bool readonly)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a> (<a class="el" href="a00133.html">const_accessor</a> &item_accessor, bool readonly)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4cdeea67af6c1fcd8f1d5e9c4cab61e8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::allocate" ref="4cdeea67af6c1fcd8f1d5e9c4cab61e8" args="(size_type n, const void *hint=0)" -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a> (size_type n, const void *hint=0)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">delete item by accessor <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="308ec5ad19fdd1be4d345f8013070150"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_equal_range" ref="308ec5ad19fdd1be4d345f8013070150" args="(const Key &key, I end) const " -->
-template<typename I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">std::pair< I, I > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a> (const Key &key, I end) const </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="3d4eadf188f7d85d3805ae534e0b8e1c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::deallocate" ref="3d4eadf188f7d85d3805ae534e0b8e1c" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a> (pointer p, size_type)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7973cd92f57dcb092ab757f8d9e089f9"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="7973cd92f57dcb092ab757f8d9e089f9" args="(const concurrent_hash_map &source)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a> (const <a class="el" href="a00130.html">concurrent_hash_map</a> &source)</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="fb23b687b4c0429dab4c7f8017266cf0"></a><!-- doxytag: member="tbb::cache_aligned_allocator::max_size" ref="fb23b687b4c0429dab4c7f8017266cf0" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a> () const   throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy "source" to *this, where *this must start out empty. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="35372431aedfcc88b890d895933cebc2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="35372431aedfcc88b890d895933cebc2" args="(I first, I last)" -->
-template<typename I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_copy</b> (I first, I last)</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="958ee8745c86c275bfc9533af565e017"></a><!-- doxytag: member="tbb::cache_aligned_allocator::construct" ref="958ee8745c86c275bfc9533af565e017" args="(pointer p, const value_type &value)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#958ee8745c86c275bfc9533af565e017">construct</a> (pointer p, const value_type &value)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#f0cdf5930563a49ffe827c520e948e01">internal_fast_find</a> (const Key &key) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href="#f0cdf5930563a49ffe827c520e948e01"></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="964dbe9bfcb2ac0157f8b77f252f951b"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_allocator" ref="964dbe9bfcb2ac0157f8b77f252f951b" args="" -->
-node_allocator_type </td><td class="memItemRight" valign="bottom"><b>my_allocator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d13c1f34b3826f9235b82ea90818169"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_hash_compare" ref="1d13c1f34b3826f9235b82ea90818169" args="" -->
-HashCompare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</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="e24acd2f6849db3377a3942807639758"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_iterator" ref="e24acd2f6849db3377a3942807639758" args="" -->
-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="c94f21746c8902f7e0b5115a8d4da1d2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_range" ref="c94f21746c8902f7e0b5115a8d4da1d2" args="" -->
-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="2c0028dfa75a6baa14007355ab1ef7fc"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor" ref="2c0028dfa75a6baa14007355ab1ef7fc" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></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="cd298895a4f1654b5149ec84b591ecb5"></a><!-- doxytag: member="tbb::cache_aligned_allocator::destroy" ref="cd298895a4f1654b5149ec84b591ecb5" args="(pointer p)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#cd298895a4f1654b5149ec84b591ecb5">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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">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="a00131.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html">bucket_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href="a00132.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">const_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00133.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
-
-Unordered map from Key to T. 
-<p>
-<a class="el" href="a00130.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="a00130.html#67d8c254b1666d89267c8a4a33c864f3">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="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=()</a> operati [...]
-</dd></dl>
-<dl compact><dt><b>Changes since TBB 2.1</b></dt><dd><ul>
-<li>Replaced internal algorithm and data structure. Patent is pending.</li><li>Added buckets number argument for constructor</li></ul>
-</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="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert()</a> methods</li><li>Added <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator()</a></li><li>Added <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap()</a></li [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="b65abfa291da566617dd58dfb349630a"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="b65abfa291da566617dd58dfb349630a" args="(accessor &item_accessor)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> & </td>
-          <td class="paramname"> <em>item_accessor</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Erase item by accessor. 
-<p>
-Return true if item was erased by particularly this call. 
-</div>
-</div><p>
-<a class="anchor" name="fc64086f9f518cef8c368c9429d0064e"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="fc64086f9f518cef8c368c9429d0064e" args="(const_accessor &item_accessor)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> & </td>
-          <td class="paramname"> <em>item_accessor</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Erase item by <a class="el" href="a00133.html">const_accessor</a>. 
-<p>
-Return true if item was erased by particularly this call. 
-</div>
-</div><p>
-<a class="anchor" name="58df7a1e4373c55eb4c2fa9dc69516b1"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="58df7a1e4373c55eb4c2fa9dc69516b1" args="(const Key &key)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase           </td>
-          <td>(</td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Erase item. 
-<p>
-Return true if item was erased by particularly this call. 
-</div>
-</div><p>
-<a class="anchor" name="4f7cc0aab2d8216c0a6e681f32dd48c8"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="4f7cc0aab2d8216c0a6e681f32dd48c8" args="(accessor &result, const Key &key)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Find item and acquire a write lock on the item. 
-<p>
-Return true if item is found, false otherwise. 
-</div>
-</div><p>
-<a class="anchor" name="9fa1ca60af4ef761a100617b27718585"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="9fa1ca60af4ef761a100617b27718585" args="(const_accessor &result, const Key &key) const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Find item and acquire a read lock on the item. 
-<p>
-Return true if item is found, false otherwise. 
-</div>
-</div><p>
-<a class="anchor" name="3034a308bc839695a5714a107380c4b9"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="3034a308bc839695a5714a107380c4b9" args="(const value_type &value)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"> <em>value</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Insert item by copying if there is no such key present already. 
-<p>
-Returns true if item is inserted. 
-</div>
-</div><p>
-<a class="anchor" name="7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7bd4dcf6ea74a32299fd57d8d7fc7ed8" args="(accessor &result, const value_type &value)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"> <em>value</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="68a46a26bd4308c1780d021ca7e8fc15"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="68a46a26bd4308c1780d021ca7e8fc15" args="(const_accessor &result, const value_type &value)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const value_type & </td>
-          <td class="paramname"> <em>value</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="8ea81ff7fea044f859273b354c91c185"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="8ea81ff7fea044f859273b354c91c185" args="(accessor &result, const Key &key)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Insert item (if not already present) and acquire a write lock on the item. 
-<p>
-Returns true if item is new. 
-</div>
-</div><p>
-<a class="anchor" name="67d8c254b1666d89267c8a4a33c864f3"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="67d8c254b1666d89267c8a4a33c864f3" args="(const_accessor &result, const Key &key)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> & </td>
-          <td class="paramname"> <em>result</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Insert item (if not already present) and acquire a read lock on the item. 
-<p>
-Returns true if item is new. 
-</div>
-</div><p>
-<a class="anchor" name="f0cdf5930563a49ffe827c520e948e01"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_fast_find" ref="f0cdf5930563a49ffe827c520e948e01" args="(const Key &key) const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">const_pointer <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::internal_fast_find           </td>
-          <td>(</td>
-          <td class="paramtype">const Key & </td>
-          <td class="paramname"> <em>key</em>          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline, protected]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename T><br>
+ class tbb::cache_aligned_allocator< T ></h3>
 
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
 <p>
-Fast find when no concurrent erasure is used. For internal use inside TBB only! 
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
-Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00277.html">cache_aligned_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00131.html b/doc/html/a00131.html
index bb77cd5..f700cbd 100644
--- a/doc/html/a00131.html
+++ b/doc/html/a00131.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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, Allocator >::accessor Class Reference</title>
+<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00131.html">accessor</a></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::concurrent_hash_map::const_accessor" -->Allows write access to elements and combines data access, locking, and garbage collection.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00131.html">cache_aligned_allocator< void ></a></div>
+<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::cache_aligned_allocator< void >" -->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="a00272.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00277.html">cache_aligned_allocator.h</a>></code>
 <p>
-Inherits <a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>.
-<p>
-Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00017.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00009.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="34035ddb9e2a27f2f0a1f6a2a16730cf"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::value_type" ref="34035ddb9e2a27f2f0a1f6a2a16730cf" args="" -->
-typedef concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">value_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce89776145998f0685a767b4f195272d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::pointer" ref="ce89776145998f0685a767b4f195272d" args="" -->
+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="4431fbbe1a8cfeb19c48ad0072078f45"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::const_pointer" ref="4431fbbe1a8cfeb19c48ad0072078f45" args="" -->
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</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="03a091f7355a3c0c03f839893695f372"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator *" ref="03a091f7355a3c0c03f839893695f372" args="() const " -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">operator *</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ab296f4ecdd75f8e193ff92004a697d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::value_type" ref="2ab296f4ecdd75f8e193ff92004a697d" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></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="302f02e5deec0a67b872e9cfb08d9e60"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator->" ref="302f02e5deec0a67b872e9cfb08d9e60" args="() const " -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">operator-></a> () const </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>rebind</b></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 Allocator><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</h3>
+<h3>template<><br>
+ class tbb::cache_aligned_allocator< void ></h3>
 
-Allows write access to elements and combines data access, locking, and garbage collection. 
+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="a00272.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00277.html">cache_aligned_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00132.html b/doc/html/a00132.html
index 4231a51..75e80c8 100644
--- a/doc/html/a00132.html
+++ b/doc/html/a00132.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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, Allocator >::bucket_accessor Class Reference</title>
+<title>tbb::captured_exception Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,42 +21,131 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00132.html">bucket_accessor</a></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::bucket_accessor" -->bucket accessor is to find, rehash, acquire a lock, and access a bucket  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00132.html">captured_exception</a></div>
+<h1>tbb::captured_exception Class Reference</h1><!-- doxytag: class="tbb::captured_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->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="a00272.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::captured_exception:
+<p><center><img src="a00132.png" usemap="#tbb::captured_exception_map" border="0" alt=""></center>
+<map name="tbb::captured_exception_map">
+<area href="a00180.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,146,24">
+</map>
+<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="53584e6b0cf6cda95f31fcbfabb311fe"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="53584e6b0cf6cda95f31fcbfabb311fe" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
- </td><td class="memItemRight" valign="bottom"><b>bucket_accessor</b> (<a class="el" href="a00130.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b50d9716bcdd281df574ec758a3952f9"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="b50d9716bcdd281df574ec758a3952f9" args="(const captured_exception &src)" -->
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00132.html">captured_exception</a> &src)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b75959ce5a971b05cfefcbc1d09a022"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::acquire" ref="7b75959ce5a971b05cfefcbc1d09a022" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a> (<a class="el" href="a00130.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ac89d457be837a19a3d505050f3a4e8"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="2ac89d457be837a19a3d505050f3a4e8" args="(const char *name, const char *info)" -->
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name, const char *info)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adf8e405df5787351fe816c42042b9ec"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::is_writer" ref="adf8e405df5787351fe816c42042b9ec" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e95b8eb99ec9dea22934ac528a08654c"></a><!-- doxytag: member="tbb::captured_exception::operator=" ref="e95b8eb99ec9dea22934ac528a08654c" args="(const captured_exception &src)" -->
+<a class="el" href="a00132.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00132.html">captured_exception</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">check whether bucket is locked for write <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e98ad1b46ed35fb4a92d65c16c6982d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::operator()" ref="7e98ad1b46ed35fb4a92d65c16c6982d" args="()" -->
-bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00132.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">move</a> ()  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32b2b1c83ca85859bc5276022821152d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::upgrade_to_writer" ref="32b2b1c83ca85859bc5276022821152d" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#837a50b8f6a800bda225c39d1699643f"></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="a00132.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">move()</a> method.  <a href="#93d875d3555502ff6f18513525de204c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#2dd1be66ab32fa27e0ddef5707fa67ef"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af82fd677449c5ca727fa1d7e16f9f5"></a><!-- doxytag: member="tbb::captured_exception::name" ref="5af82fd677449c5ca727fa1d7e16f9f5" args="() const " -->
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">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="6b5988ef74a1fe2a58998d110b3633e0"></a><!-- doxytag: member="tbb::captured_exception::what" ref="6b5988ef74a1fe2a58998d110b3633e0" args="() const " -->
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">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="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="92ed4100413eef26969f8299f6845e18"></a><!-- doxytag: member="tbb::captured_exception::set" ref="92ed4100413eef26969f8299f6845e18" args="(const char *name, const char *info)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set</b> (const char *name, const char *info)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5f56d05102acdba6c2f09ba6db3baeb"></a><!-- doxytag: member="tbb::captured_exception::clear" ref="d5f56d05102acdba6c2f09ba6db3baeb" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>clear</b> ()  throw ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</h3>
+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="a00180.html">tbb::tbb_exception</a> </dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="93d875d3555502ff6f18513525de204c"></a><!-- doxytag: member="tbb::captured_exception::destroy" ref="93d875d3555502ff6f18513525de204c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys objects created by the <a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">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="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="837a50b8f6a800bda225c39d1699643f"></a><!-- doxytag: member="tbb::captured_exception::move" ref="837a50b8f6a800bda225c39d1699643f" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00132.html">captured_exception</a>* __TBB_EXPORTED_METHOD tbb::captured_exception::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-bucket accessor is to find, rehash, acquire a lock, and access a bucket 
 <p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="2dd1be66ab32fa27e0ddef5707fa67ef"></a><!-- doxytag: member="tbb::captured_exception::throw_self" ref="2dd1be66ab32fa27e0ddef5707fa67ef" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::captured_exception::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00132.png b/doc/html/a00132.png
new file mode 100644
index 0000000..2470bea
Binary files /dev/null and b/doc/html/a00132.png differ
diff --git a/doc/html/a00133.html b/doc/html/a00133.html
index 92375ea..e89ce7b 100644
--- a/doc/html/a00133.html
+++ b/doc/html/a00133.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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, Allocator >::const_accessor Class Reference</title>
+<title>tbb::combinable< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,62 +21,58 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00133.html">const_accessor</a></div>
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00133.html">combinable</a></div>
+<h1>tbb::combinable< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::combinable" -->Thread-local storage with optional reduction.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00272.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00279.html">combinable.h</a>></code>
 <p>
-Inherited by <a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>.
-<p>
-Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00016.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00011.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="b5de4197079009b1cfd8bdeb594c6428"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::value_type" ref="b5de4197079009b1cfd8bdeb594c6428" args="" -->
-typedef const concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">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="e55c7c3f0acd7fd823a07957e71a7462"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::empty" ref="e55c7c3f0acd7fd823a07957e71a7462" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a> () const </td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d03619e90e62555aa5634fcc8adadcc9"></a><!-- doxytag: member="tbb::combinable::combinable" ref="d03619e90e62555aa5634fcc8adadcc9" args="(finit _finit)" -->
+template<typename finit> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>combinable</b> (finit _finit)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c87e79ae98588a5780f708773388843"></a><!-- doxytag: member="tbb::combinable::~combinable" ref="2c87e79ae98588a5780f708773388843" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#2c87e79ae98588a5780f708773388843">~combinable</a> ()</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="09575d1a2dfeb8cd896c27cdd3770517"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::release" ref="09575d1a2dfeb8cd896c27cdd3770517" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</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="57012803b7bc7416452cb930121ff210"></a><!-- doxytag: member="tbb::combinable::combinable" ref="57012803b7bc7416452cb930121ff210" args="(const combinable &other)" -->
+ </td><td class="memItemRight" valign="bottom"><b>combinable</b> (const <a class="el" href="a00133.html">combinable</a> &other)</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="d95b7a39a08b7ab256dfff2ca37cdb75"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator *" ref="d95b7a39a08b7ab256dfff2ca37cdb75" args="() const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c9650d59f65b1042afa232ede57dfca9"></a><!-- doxytag: member="tbb::combinable::operator=" ref="c9650d59f65b1042afa232ede57dfca9" args="(const combinable &other)" -->
+<a class="el" href="a00133.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00133.html">combinable</a> &other)</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="6fc0491f6420ffe38c48786e7b9ab042"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator->" ref="6fc0491f6420ffe38c48786e7b9ab042" args="() const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">operator-></a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f09233cccb9b5e8a58874e43a703cac2"></a><!-- doxytag: member="tbb::combinable::clear" ref="f09233cccb9b5e8a58874e43a703cac2" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</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="6eedb35a3ca397dd289ed5ca6fb4d95d"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::const_accessor" ref="6eedb35a3ca397dd289ed5ca6fb4d95d" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d7550204bcb88fa8810b5a39e9cad24"></a><!-- doxytag: member="tbb::combinable::local" ref="2d7550204bcb88fa8810b5a39e9cad24" args="()" -->
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> ()</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="e002771760f510e06c03e0a198286172"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::~const_accessor" ref="e002771760f510e06c03e0a198286172" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93a42052881ecccdd8ddff16a1b1cca1"></a><!-- doxytag: member="tbb::combinable::local" ref="93a42052881ecccdd8ddff16a1b1cca1" args="(bool &exists)" -->
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> (bool &exists)</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="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::concurrent_hash_map< Key, T, HashCompare, Allocator >" ref="d062d8ecb243a6ec62fa30bca52a1bcf" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb0ebff0036225d81917591355c0e5b6"></a><!-- doxytag: member="tbb::combinable::combine" ref="fb0ebff0036225d81917591355c0e5b6" args="(FCombine fcombine)" -->
+template<typename FCombine> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (FCombine fcombine)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd77aff56c12366acc02d0f1588a706"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::accessor" ref="ddd77aff56c12366acc02d0f1588a706" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2b76467e3c6657878e681b916aa40f86"></a><!-- doxytag: member="tbb::combinable::combine_each" ref="2b76467e3c6657878e681b916aa40f86" args="(FCombine fcombine)" -->
+template<typename FCombine> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (FCombine fcombine)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
+<h3>template<typename T><br>
+ class tbb::combinable< T ></h3>
 
-Combines data access, locking, and garbage collection. 
+Thread-local storage with optional reduction. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00279.html">combinable.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00134.html b/doc/html/a00134.html
index 53fec6e..ff33e63 100644
--- a/doc/html/a00134.html
+++ b/doc/html/a00134.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
+<title>tbb::concurrent_bounded_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,128 +21,241 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00232.html">strict_ppl</a>::<a class="el" href="a00134.html">concurrent_queue</a></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00134.html">concurrent_bounded_queue</a></div>
+<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
 <small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::strict_ppl::concurrent_queue" -->A high-performance thread-safe non-blocking concurrent queue.  
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00282.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00292.html">concurrent_queue.h</a>></code>
 <p>
+<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
+<p><center><img src="a00134.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::concurrent_bounded_queue< T, A >_map">
+<area href="a00140.html" alt="tbb::deprecated::concurrent_queue< T, A >" shape="rect" coords="0,56,257,80">
+</map>
 <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="682c3978d5cb0620000994f11c44a476"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::value_type" ref="682c3978d5cb0620000994f11c44a476" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98245517a931e5893f6601e66c51fc75"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::value_type" ref="98245517a931e5893f6601e66c51fc75" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#98245517a931e5893f6601e66c51fc75">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="a8d725c50a9834bb7af5b67c0aff92b8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::reference" ref="a8d725c50a9834bb7af5b67c0aff92b8" args="" -->
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e2726fccf6d975dc1071608cc0bbf90"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::allocator_type" ref="2e2726fccf6d975dc1071608cc0bbf90" args="" -->
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">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="dcd44ca6a88c0dc7a847a47a10811f0c"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::reference" ref="dcd44ca6a88c0dc7a847a47a10811f0c" args="" -->
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">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="4d48e7ff93f81636bca2c74f7da34750"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_reference" ref="4d48e7ff93f81636bca2c74f7da34750" args="" -->
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="796713d0b9ba93a4721cbe13e4474068"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_reference" ref="796713d0b9ba93a4721cbe13e4474068" args="" -->
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">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"><a class="anchor" name="8fc30e93f8342a1960357f71e4fe8a2b"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::size_type" ref="8fc30e93f8342a1960357f71e4fe8a2b" args="" -->
-typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a></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="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="068576d16c7e4e05d52f9db7a45b5b65"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::difference_type" ref="068576d16c7e4e05d52f9db7a45b5b65" args="" -->
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue.  <a href="#a80e4c11dbb324e4b92a24a77bbcde68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b45c91297e69515d83d5eef85ae1f49"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::difference_type" ref="4b45c91297e69515d83d5eef85ae1f49" args="" -->
+typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">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="5a3956341728eaa558d8827063718cac"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::allocator_type" ref="5a3956341728eaa558d8827063718cac" args="" -->
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">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="9736ac047d6da3363895c7e5b121d0c4"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::iterator" ref="9736ac047d6da3363895c7e5b121d0c4" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aeea2ad38b7e7fc2866f063dfed24c52"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::iterator" ref="aeea2ad38b7e7fc2866f063dfed24c52" args="" -->
 typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00134.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+ <a class="el" href="a00134.html">concurrent_bounded_queue</a>,<br>
+ 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="9cd76d19af8c78be1bafc6ca0123ac0d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_iterator" ref="9cd76d19af8c78be1bafc6ca0123ac0d" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0edd1a90e6ffa503bac1c4027116dbff"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_iterator" ref="0edd1a90e6ffa503bac1c4027116dbff" args="" -->
 typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00134.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+ <a class="el" href="a00134.html">concurrent_bounded_queue</a>,<br>
+ 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="7c48a05a94a1f4f98fdfadfbef98ecf6"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="7c48a05a94a1f4f98fdfadfbef98ecf6" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3525226732963ff0f13e89d8e6dab5b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="e3525226732963ff0f13e89d8e6dab5b" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="25209656c84f2f9b030e2f9162713341"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="25209656c84f2f9b030e2f9162713341" args="(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b7fb414d2eaa8a7f5d68fc4cd63ac50"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="7b7fb414d2eaa8a7f5d68fc4cd63ac50" args="(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00134.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">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="a5e04dcd7db9fd9b583b4e7df832246a"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="a5e04dcd7db9fd9b583b4e7df832246a" args="(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())" -->
 template<typename InputIterator> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00134.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a6b98ea11a867db8ac868f0113ca429"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="8a6b98ea11a867db8ac868f0113ca429" args="(const concurrent_queue &src, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00134.html">concurrent_queue</a> &src, const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</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="830b33753d6b149c366344e29b2edd8c"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::~concurrent_queue" ref="830b33753d6b149c366344e29b2edd8c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acaf5b510dc0dfc7780b8c956cf773cf"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::~concurrent_bounded_queue" ref="acaf5b510dc0dfc7780b8c956cf773cf" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_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="73c47563ffcc4c2f6452f25a04ebe2e2"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::push" ref="73c47563ffcc4c2f6452f25a04ebe2e2" args="(const T &source)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a> (const T &source)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceb08c743b11ba88c878e73fff8af20b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::push" ref="ceb08c743b11ba88c878e73fff8af20b" args="(const T &source)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a> (T &result)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a> (T &destination)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue.  <a href="#41f4c6bd7a82ab070e840bbf81b0b123"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">try_push</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="#2bd6232531279fb3ccbd296bea23066b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a> (T &destination)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#0ca487019bbb00a196442aff78a1e4f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops.  <a href="#7dc14d1a579a4cccda9f857585e1768d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f64924f2ee9225c368a270fc3c394db9"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::empty" ref="f64924f2ee9225c368a270fc3c394db9" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#ae31ca0db34ef96ef1e74aa0d28c95f8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eaa35a5274606779802e9a669a706260"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_size" ref="eaa35a5274606779802e9a669a706260" args="() const " -->
-<a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">size()</a><=0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2888b3e4e837d7e03f2c731963a402b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::capacity" ref="b2888b3e4e837d7e03f2c731963a402b" args="() const " -->
+<a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the number of items in the queue; thread unsafe. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3f6fce0cfa2d581d6f3b47e0613ad64"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::empty" ref="f3f6fce0cfa2d581d6f3b47e0613ad64" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</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="a00134.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a> (<a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> capacity)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to size()==0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c32e8e84c0524155133b4aae32d2a827"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::clear" ref="c32e8e84c0524155133b4aae32d2a827" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#089f33dfd504e30a95f40ed2a5799367"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="415eb87e53b1c6a266de06ecbc490d16"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::get_allocator" ref="415eb87e53b1c6a266de06ecbc490d16" args="() const " -->
+<a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a> () const </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="f034f70caef445fe8abc9113ec926a8d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::get_allocator" ref="f034f70caef445fe8abc9113ec926a8d" args="() const " -->
-<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">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="90b31e2954c6e4596c7900435a5f4bc1"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::clear" ref="90b31e2954c6e4596c7900435a5f4bc1" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a> ()</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="6297f48808dd7c14e6c2fe81559ca190"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="6297f48808dd7c14e6c2fe81559ca190" args="()" -->
+<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="5a2637188e104503ac2c0dff633014e8"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="5a2637188e104503ac2c0dff633014e8" args="()" -->
 iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1569f70e70521fe71944a5b0138c6ef5"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="1569f70e70521fe71944a5b0138c6ef5" args="()" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c7267334ef11087c76c810abb9d5cbc2"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="c7267334ef11087c76c810abb9d5cbc2" args="()" -->
 iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3e6746f7b6ecfbc16f781665ac51112"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="e3e6746f7b6ecfbc16f781665ac51112" args="() const " -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8be757841d0bbf7744508aaf6a141d08"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="8be757841d0bbf7744508aaf6a141d08" args="() const " -->
 const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83bf90849c08f44d25dd7a3b207a8956"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="83bf90849c08f44d25dd7a3b207a8956" args="() const " -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3aac91d288bf227d9d06717b44ef28f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="3aac91d288bf227d9d06717b44ef28f7" args="() const " -->
 const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_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="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
 class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></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"><b>destroyer</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class used to ensure exception-safety of method "pop". <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
- class tbb::strict_ppl::concurrent_queue< T, A ></h3>
+<h3>template<typename T, class A = cache_aligned_allocator<T>><br>
+ class tbb::concurrent_bounded_queue< T, A ></h3>
+
+A high-performance thread-safe blocking concurrent bounded queue. 
+<p>
+This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="a80e4c11dbb324e4b92a24a77bbcde68"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size_type" ref="a80e4c11dbb324e4b92a24a77bbcde68" args="" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-A high-performance thread-safe non-blocking concurrent queue. 
 <p>
-Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+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. 
+</div>
+</div><p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="ae31ca0db34ef96ef1e74aa0d28c95f8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::try_pop" ref="ae31ca0db34ef96ef1e74aa0d28c95f8" args="(T &result)" -->
+<a class="anchor" name="41f4c6bd7a82ab070e840bbf81b0b123"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::pop" ref="41f4c6bd7a82ab070e840bbf81b0b123" args="(T &destination)" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename T, typename A = cache_aligned_allocator<T>> </div>
+template<typename T, class A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop           </td>
+          <td class="memname">void <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::pop           </td>
           <td>(</td>
           <td class="paramtype">T & </td>
-          <td class="paramname"> <em>result</em>          </td>
+          <td class="paramname"> <em>destination</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Dequeue item from head of queue. 
+<p>
+Block until an item becomes available, and then dequeue it. 
+</div>
+</div><p>
+<a class="anchor" name="089f33dfd504e30a95f40ed2a5799367"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="089f33dfd504e30a95f40ed2a5799367" args="(size_type capacity)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td>
+          <td class="paramname"> <em>capacity</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the capacity. 
+<p>
+Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. 
+</div>
+</div><p>
+<a class="anchor" name="7dc14d1a579a4cccda9f857585e1768d"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size" ref="7dc14d1a579a4cccda9f857585e1768d" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::size           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity()</a> if there are push operations in flight. 
+</div>
+</div><p>
+<a class="anchor" name="0ca487019bbb00a196442aff78a1e4f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_pop" ref="0ca487019bbb00a196442aff78a1e4f7" args="(T &destination)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>destination</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -156,8 +269,32 @@ Attempt to dequeue an item from head of queue.
 Does not wait for item to become available. Returns true if successful; false otherwise. 
 </div>
 </div><p>
+<a class="anchor" name="2bd6232531279fb3ccbd296bea23066b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_push" ref="2bd6232531279fb3ccbd296bea23066b" args="(const T &source)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00134.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push           </td>
+          <td>(</td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"> <em>source</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00282.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00292.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00134.png b/doc/html/a00134.png
new file mode 100644
index 0000000..e9d90a2
Binary files /dev/null and b/doc/html/a00134.png differ
diff --git a/doc/html/a00135.html b/doc/html/a00135.html
index a360975..72cab35 100644
--- a/doc/html/a00135.html
+++ b/doc/html/a00135.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::deprecated::concurrent_queue< T, A > Class Template Reference</title>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,85 +21,287 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00135.html">concurrent_queue</a></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00135.html">concurrent_hash_map</a></div>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference<br>
 <small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::deprecated::concurrent_queue" --><!-- doxytag: inherits="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_hash_map" -->Unordered map from Key to T.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00282.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00280.html">concurrent_hash_map.h</a>></code>
 <p>
-Inherits <a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A >< T, A ></a>.
-<p>
-Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00021.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00012.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="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
-typedef <a class="el" href="a00129.html">concurrent_bounded_queue</a><<br>
- T, A >::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="a59325d5213bdbb32e66525364d9ca6e"></a><!-- doxytag: member="tbb::concurrent_hash_map::key_type" ref="a59325d5213bdbb32e66525364d9ca6e" args="" -->
+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="d30555ca958fcf4401d8c46e32b35832"></a><!-- doxytag: member="tbb::concurrent_hash_map::mapped_type" ref="d30555ca958fcf4401d8c46e32b35832" args="" -->
+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="ba7dfe412706706fc77eeb9ca106dd77"></a><!-- doxytag: member="tbb::concurrent_hash_map::value_type" ref="ba7dfe412706706fc77eeb9ca106dd77" args="" -->
+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="9536f0726d303e50e0bb89c6e252dcc9"></a><!-- doxytag: member="tbb::concurrent_hash_map::size_type" ref="9536f0726d303e50e0bb89c6e252dcc9" args="" -->
+typedef hash_map_base::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="156eff4cfda20255ab61594772322632"></a><!-- doxytag: member="tbb::concurrent_hash_map::difference_type" ref="156eff4cfda20255ab61594772322632" args="" -->
+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="9efc6155cc67220afe493d5ba86da474"></a><!-- doxytag: member="tbb::concurrent_hash_map::pointer" ref="9efc6155cc67220afe493d5ba86da474" args="" -->
+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="1de4baea4800c9422497160c2dc6ee88"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_pointer" ref="1de4baea4800c9422497160c2dc6ee88" args="" -->
+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="7f4e03ecea778f011ab7c3c0b61d2521"></a><!-- doxytag: member="tbb::concurrent_hash_map::reference" ref="7f4e03ecea778f011ab7c3c0b61d2521" args="" -->
+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="7117842ce3ed7c5147d3c886922e64d0"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::const_iterator" ref="7117842ce3ed7c5147d3c886922e64d0" args="" -->
-typedef <a class="el" href="a00129.html">concurrent_bounded_queue</a><<br>
- T, A >::const_iterator </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="9fa6589f474a5b2f770ee12ab9965b35"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_reference" ref="9fa6589f474a5b2f770ee12ab9965b35" args="" -->
+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="e0a1323016e3475bf8a5ed8952f84b53"></a><!-- doxytag: member="tbb::concurrent_hash_map::iterator" ref="e0a1323016e3475bf8a5ed8952f84b53" args="" -->
+typedef internal::hash_map_iterator<<br>
+ <a class="el" href="a00135.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="2380701b85fb373abfe1c20d4044cc47"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_iterator" ref="2380701b85fb373abfe1c20d4044cc47" args="" -->
+typedef internal::hash_map_iterator<<br>
+ <a class="el" href="a00135.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="0f251ff63b9ee8ef88bac1452de92618"></a><!-- doxytag: member="tbb::concurrent_hash_map::range_type" ref="0f251ff63b9ee8ef88bac1452de92618" args="" -->
+typedef internal::hash_map_range<<br>
+ iterator > </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="e91c41ef86638719f1e4fb44cc936ed2"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_range_type" ref="e91c41ef86638719f1e4fb44cc936ed2" args="" -->
+typedef internal::hash_map_range<<br>
+ const_iterator > </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="dd223032ecd376e846b6724e168bdc56"></a><!-- doxytag: member="tbb::concurrent_hash_map::allocator_type" ref="dd223032ecd376e846b6724e168bdc56" args="" -->
+typedef Allocator </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="aaf19bd7337b72f3131ece60f7315ef7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="aaf19bd7337b72f3131ece60f7315ef7" args="(const A &a=A())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a> (const A &a=A())</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="342582ba05d9fb893ed80875d2b7a42f"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="342582ba05d9fb893ed80875d2b7a42f" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#342582ba05d9fb893ed80875d2b7a42f">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="c1bf3c669935aceb1dc0169e3a19e0be"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="c1bf3c669935aceb1dc0169e3a19e0be" args="(size_type n, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#c1bf3c669935aceb1dc0169e3a19e0be">concurrent_hash_map</a> (size_type n, const allocator_type &a=allocator_type())</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="fc092b9082f233482f3513fc3bb670f7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="fc092b9082f233482f3513fc3bb670f7" args="(const concurrent_queue &src, const A &a=A())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00135.html">concurrent_queue</a> &src, const A &a=A())</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table with n preallocated buckets. This number serves also as initial concurrency level. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc50f7bca65d0c27cbf5c31d2fa63eac"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="bc50f7bca65d0c27cbf5c31d2fa63eac" args="(const concurrent_hash_map &table, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a> (const <a class="el" href="a00135.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="383187b910f8c3ca27a39c1638566f15"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="383187b910f8c3ca27a39c1638566f15" args="(InputIterator begin, InputIterator end, const A &a=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="a00135.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a> (InputIterator begin, InputIterator end, const A &a=A())</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b5132202dff9ee3d619bef6b1d84edea"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="b5132202dff9ee3d619bef6b1d84edea" args="(I first, I last, const allocator_type &a=allocator_type())" -->
+template<typename I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00135.html#b5132202dff9ee3d619bef6b1d84edea">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="adadeb9d1acb8c3b34517435666cf297"></a><!-- doxytag: member="tbb::concurrent_hash_map::operator=" ref="adadeb9d1acb8c3b34517435666cf297" args="(const concurrent_hash_map &table)" -->
+<a class="el" href="a00135.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#adadeb9d1acb8c3b34517435666cf297">operator=</a> (const <a class="el" href="a00135.html">concurrent_hash_map</a> &table)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a> (const T &source)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">rehash</a> (size_type n=0)</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="#7c45561bafe71107d09b2bc1b8f4e681"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &destination)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Rehashes and optionally resizes the whole table.  <a href="#9ba53dc3a98d81331ded7c6c2b17f58f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="36bcd50fd5383f3682032323b2d74333"></a><!-- doxytag: member="tbb::concurrent_hash_map::clear" ref="36bcd50fd5383f3682032323b2d74333" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#36bcd50fd5383f3682032323b2d74333">clear</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
+<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="5e96649f71f68f3b6bf3b1eee6b441a7"></a><!-- doxytag: member="tbb::concurrent_hash_map::~concurrent_hash_map" ref="5e96649f71f68f3b6bf3b1eee6b441a7" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#5e96649f71f68f3b6bf3b1eee6b441a7">~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="e0f51b807e124c2bee274c5f86a2a817"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="e0f51b807e124c2bee274c5f86a2a817" args="(size_type grainsize=1)" -->
+range_type </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="78989fb98b211ab5f8437798d490e004"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="78989fb98b211ab5f8437798d490e004" args="(size_type grainsize=1) const " -->
+const_range_type </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="dfb7ab010b46fc194673256479c2ea48"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="dfb7ab010b46fc194673256479c2ea48" args="()" -->
 iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35fbb0d7e135545eb1daec2b4ae894cd"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="35fbb0d7e135545eb1daec2b4ae894cd" args="()" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2dd7c8b3d37a93ba551e4de33bb73d"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="7e2dd7c8b3d37a93ba551e4de33bb73d" args="()" -->
 iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62f31fe653e1158e64ddb0e163d0335c"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="62f31fe653e1158e64ddb0e163d0335c" args="() const " -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="be53487f364b5744187af9f7627c3190"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="be53487f364b5744187af9f7627c3190" args="() const " -->
 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="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b947898d1a60b680d8c4f915442e1a8"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="6b947898d1a60b680d8c4f915442e1a8" args="() const " -->
 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="3b6f066f9b1e51eaefa67c37928a6d5f"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="3b6f066f9b1e51eaefa67c37928a6d5f" args="(const Key &key)" -->
+std::pair< iterator, iterator > </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="9d1d5f33f2babb6780794c9ed6193174"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="9d1d5f33f2babb6780794c9ed6193174" args="(const Key &key) const " -->
+std::pair< const_iterator,<br>
+ const_iterator > </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"><a class="anchor" name="25b0e3881038877604c5efc1c14c4afd"></a><!-- doxytag: member="tbb::concurrent_hash_map::size" ref="25b0e3881038877604c5efc1c14c4afd" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e5d085375320cd3f34faeedc5bba8f6"></a><!-- doxytag: member="tbb::concurrent_hash_map::empty" ref="3e5d085375320cd3f34faeedc5bba8f6" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">size()</a>==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6ed260e217fb310050928d7bd03f1b5e"></a><!-- doxytag: member="tbb::concurrent_hash_map::max_size" ref="6ed260e217fb310050928d7bd03f1b5e" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#6ed260e217fb310050928d7bd03f1b5e">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="d1c1e23f2a3ba1f943d00d95388d718f"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_count" ref="d1c1e23f2a3ba1f943d00d95388d718f" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#d1c1e23f2a3ba1f943d00d95388d718f">bucket_count</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of buckets. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79d1e5c3b975dbd38b43138266fe4c0e"></a><!-- doxytag: member="tbb::concurrent_hash_map::get_allocator" ref="79d1e5c3b975dbd38b43138266fe4c0e" args="() const " -->
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">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="dd73f70aa6602021ea2c56bac9715353"></a><!-- doxytag: member="tbb::concurrent_hash_map::swap" ref="dd73f70aa6602021ea2c56bac9715353" args="(concurrent_hash_map &table)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#dd73f70aa6602021ea2c56bac9715353">swap</a> (<a class="el" href="a00135.html">concurrent_hash_map</a> &table)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances. Iterators are invalidated <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3e97a1f3cb66e81a2336b013ef1ae7d"></a><!-- doxytag: member="tbb::concurrent_hash_map::count" ref="a3e97a1f3cb66e81a2336b013ef1ae7d" args="(const Key &key) const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">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="a00135.html#9fa1ca60af4ef761a100617b27718585">find</a> (<a class="el" href="a00138.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="#9fa1ca60af4ef761a100617b27718585"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a> (<a class="el" href="a00136.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="#4f7cc0aab2d8216c0a6e681f32dd48c8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#67d8c254b1666d89267c8a4a33c864f3">insert</a> (<a class="el" href="a00138.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="#67d8c254b1666d89267c8a4a33c864f3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#8ea81ff7fea044f859273b354c91c185">insert</a> (<a class="el" href="a00136.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="#8ea81ff7fea044f859273b354c91c185"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a> (<a class="el" href="a00138.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="#68a46a26bd4308c1780d021ca7e8fc15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a> (<a class="el" href="a00136.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="#7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#3034a308bc839695a5714a107380c4b9">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="#3034a308bc839695a5714a107380c4b9"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7b42dba04d71e1367f0d542087906178"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7b42dba04d71e1367f0d542087906178" args="(I first, I last)" -->
+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="a00135.html#7b42dba04d71e1367f0d542087906178">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="a00135.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a> (const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#58df7a1e4373c55eb4c2fa9dc69516b1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#fc64086f9f518cef8c368c9429d0064e">erase</a> (<a class="el" href="a00138.html">const_accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00138.html">const_accessor</a>.  <a href="#fc64086f9f518cef8c368c9429d0064e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#b65abfa291da566617dd58dfb349630a">erase</a> (<a class="el" href="a00136.html">accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#b65abfa291da566617dd58dfb349630a"></a><br></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="4a66e22918752bb0d7c22333bec7e0d6"></a><!-- doxytag: member="tbb::concurrent_hash_map::node_allocator_type" ref="4a66e22918752bb0d7c22333bec7e0d6" args="" -->
+typedef Allocator::template <br>
+rebind< node >::other </td><td class="memItemRight" valign="bottom"><b>node_allocator_type</b></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="572fec6cb2b0d70b8a3a12c5be4df6d4"></a><!-- doxytag: member="tbb::concurrent_hash_map::delete_node" ref="572fec6cb2b0d70b8a3a12c5be4df6d4" args="(node_base *n)" -->
+void </td><td class="memItemRight" valign="bottom"><b>delete_node</b> (node_base *n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="058f1d5e2075d11c9b2ac00f1f0ae60e"></a><!-- doxytag: member="tbb::concurrent_hash_map::search_bucket" ref="058f1d5e2075d11c9b2ac00f1f0ae60e" args="(const key_type &key, bucket *b) const " -->
+node * </td><td class="memItemRight" valign="bottom"><b>search_bucket</b> (const key_type &key, bucket *b) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f2fe44bde2158a2f2a315c6457ebd030"></a><!-- doxytag: member="tbb::concurrent_hash_map::rehash_bucket" ref="f2fe44bde2158a2f2a315c6457ebd030" args="(bucket *b_new, const hashcode_t h)" -->
+void </td><td class="memItemRight" valign="bottom"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f0ba43d9cb783f12dd01bf5677da097"></a><!-- doxytag: member="tbb::concurrent_hash_map::lookup" ref="0f0ba43d9cb783f12dd01bf5677da097" args="(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00138.html">const_accessor</a> *result, bool write)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert or find item and optionally acquire a lock on the item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="671965989ffb5f6084c776cb0bb6cdab"></a><!-- doxytag: member="tbb::concurrent_hash_map::exclude" ref="671965989ffb5f6084c776cb0bb6cdab" args="(const_accessor &item_accessor, bool readonly)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a> (<a class="el" href="a00138.html">const_accessor</a> &item_accessor, bool readonly)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">delete item by accessor <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="308ec5ad19fdd1be4d345f8013070150"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_equal_range" ref="308ec5ad19fdd1be4d345f8013070150" args="(const Key &key, I end) const " -->
+template<typename I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">std::pair< I, I > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00135.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a> (const Key &key, I end) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7973cd92f57dcb092ab757f8d9e089f9"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="7973cd92f57dcb092ab757f8d9e089f9" args="(const concurrent_hash_map &source)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a> (const <a class="el" href="a00135.html">concurrent_hash_map</a> &source)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy "source" to *this, where *this must start out empty. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="35372431aedfcc88b890d895933cebc2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="35372431aedfcc88b890d895933cebc2" args="(I first, I last)" -->
+template<typename I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>internal_copy</b> (I first, I last)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#f0cdf5930563a49ffe827c520e948e01">internal_fast_find</a> (const Key &key) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast find when no concurrent erasure is used. For internal use inside TBB only!  <a href="#f0cdf5930563a49ffe827c520e948e01"></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="964dbe9bfcb2ac0157f8b77f252f951b"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_allocator" ref="964dbe9bfcb2ac0157f8b77f252f951b" args="" -->
+node_allocator_type </td><td class="memItemRight" valign="bottom"><b>my_allocator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d13c1f34b3826f9235b82ea90818169"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_hash_compare" ref="1d13c1f34b3826f9235b82ea90818169" args="" -->
+HashCompare </td><td class="memItemRight" valign="bottom"><b>my_hash_compare</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="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e24acd2f6849db3377a3942807639758"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_iterator" ref="e24acd2f6849db3377a3942807639758" args="" -->
+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="c94f21746c8902f7e0b5115a8d4da1d2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_range" ref="c94f21746c8902f7e0b5115a8d4da1d2" args="" -->
+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="2c0028dfa75a6baa14007355ab1ef7fc"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor" ref="2c0028dfa75a6baa14007355ab1ef7fc" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></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="a00136.html">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="a00136.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">bucket_accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href="a00137.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">const_accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00138.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, class A = cache_aligned_allocator<T>><br>
- class tbb::deprecated::concurrent_queue< T, A ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
 
-A high-performance thread-safe blocking concurrent bounded queue. 
+Unordered map from Key to T. 
 <p>
-This is the pre-PPL TBB concurrent queue which support boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<a class="el" href="a00135.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="a00135.html#67d8c254b1666d89267c8a4a33c864f3">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="a00135.html#adadeb9d1acb8c3b34517435666cf297">operator=()</a> operati [...]
+</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.1</b></dt><dd><ul>
+<li>Replaced internal algorithm and data structure. Patent is pending.</li><li>Added buckets number argument for constructor</li></ul>
+</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="a00135.html#67d8c254b1666d89267c8a4a33c864f3">insert()</a> methods</li><li>Added <a class="el" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator()</a></li><li>Added <a class="el" href="a00135.html#dd73f70aa6602021ea2c56bac9715353">swap()</a></li [...]
+</dd></dl>
+
 <p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="48da3536245318af6cb5fd58bac78039"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::pop_if_present" ref="48da3536245318af6cb5fd58bac78039" args="(T &destination)" -->
+<a class="anchor" name="b65abfa291da566617dd58dfb349630a"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="b65abfa291da566617dd58dfb349630a" args="(accessor &item_accessor)" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue</a>< T, A >::pop_if_present           </td>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
           <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>destination</em>          </td>
+          <td class="paramtype"><a class="el" href="a00136.html">accessor</a> & </td>
+          <td class="paramname"> <em>item_accessor</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -108,23 +310,136 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Attempt to dequeue an item from head of queue. 
+Erase item by accessor. 
 <p>
-Does not wait for item to become available. Returns true if successful; false otherwise. <dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Use <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop()</a> </dd></dl>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="fc64086f9f518cef8c368c9429d0064e"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="fc64086f9f518cef8c368c9429d0064e" args="(const_accessor &item_accessor)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00138.html">const_accessor</a> & </td>
+          <td class="paramname"> <em>item_accessor</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
+<p>
+Erase item by <a class="el" href="a00138.html">const_accessor</a>. 
+<p>
+Return true if item was erased by particularly this call. 
 </div>
 </div><p>
-<a class="anchor" name="7c45561bafe71107d09b2bc1b8f4e681"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::push_if_not_full" ref="7c45561bafe71107d09b2bc1b8f4e681" args="(const T &source)" -->
+<a class="anchor" name="58df7a1e4373c55eb4c2fa9dc69516b1"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="58df7a1e4373c55eb4c2fa9dc69516b1" args="(const Key &key)" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase           </td>
           <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"> <em>source</em>          </td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Erase item. 
+<p>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="4f7cc0aab2d8216c0a6e681f32dd48c8"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="4f7cc0aab2d8216c0a6e681f32dd48c8" args="(accessor &result, const Key &key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00136.html">accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find item and acquire a write lock on the item. 
+<p>
+Return true if item is found, false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="9fa1ca60af4ef761a100617b27718585"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="9fa1ca60af4ef761a100617b27718585" args="(const_accessor &result, const Key &key) const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00138.html">const_accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find item and acquire a read lock on the item. 
+<p>
+Return true if item is found, false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="3034a308bc839695a5714a107380c4b9"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="3034a308bc839695a5714a107380c4b9" args="(const value_type &value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"> <em>value</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -133,13 +448,193 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Enqueue an item at tail of queue if queue is not already full. 
+Insert item by copying if there is no such key present already. 
+<p>
+Returns true if item is inserted. 
+</div>
+</div><p>
+<a class="anchor" name="7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7bd4dcf6ea74a32299fd57d8d7fc7ed8" args="(accessor &result, const value_type &value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00136.html">accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"> <em>value</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="68a46a26bd4308c1780d021ca7e8fc15"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="68a46a26bd4308c1780d021ca7e8fc15" args="(const_accessor &result, const value_type &value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00138.html">const_accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type & </td>
+          <td class="paramname"> <em>value</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="8ea81ff7fea044f859273b354c91c185"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="8ea81ff7fea044f859273b354c91c185" args="(accessor &result, const Key &key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00136.html">accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item (if not already present) and acquire a write lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<a class="anchor" name="67d8c254b1666d89267c8a4a33c864f3"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="67d8c254b1666d89267c8a4a33c864f3" args="(const_accessor &result, const Key &key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00138.html">const_accessor</a> & </td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item (if not already present) and acquire a read lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<a class="anchor" name="f0cdf5930563a49ffe827c520e948e01"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_fast_find" ref="f0cdf5930563a49ffe827c520e948e01" args="(const Key &key) const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">const_pointer <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::internal_fast_find           </td>
+          <td>(</td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em>          </td>
+          <td> ) </td>
+          <td width="100%"> const<code> [inline, protected]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Fast find when no concurrent erasure is used. For internal use inside TBB only! 
+<p>
+Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations. 
+</div>
+</div><p>
+<a class="anchor" name="9ba53dc3a98d81331ded7c6c2b17f58f"></a><!-- doxytag: member="tbb::concurrent_hash_map::rehash" ref="9ba53dc3a98d81331ded7c6c2b17f58f" args="(size_type n=0)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Key, typename T, typename HashCompare, typename A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00135.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::rehash           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>n</em> = <code>0</code>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Rehashes and optionally resizes the whole table. 
 <p>
-Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="a00135.html#9fa1ca60af4ef761a100617b27718585">find()</a> and <a class="el" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count()</a> concurrent methods in serial context. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00282.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00280.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00136.html b/doc/html/a00136.html
index 210b7ef..1da6494 100644
--- a/doc/html/a00136.html
+++ b/doc/html/a00136.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,570 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00136.html">concurrent_vector</a></div>
-<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00234.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_vector" -->Concurrent vector container.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00135.html">concurrent_hash_map</a>::<a class="el" href="a00136.html">accessor</a></div>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::concurrent_hash_map::const_accessor" -->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="a00283.html">concurrent_vector.h</a>></code>
+<code>#include <<a class="el" href="a00280.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor:
+<p><center><img src="a00136.png" usemap="#tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map" border="0" alt=""></center>
+<map name="tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map">
+<area href="a00138.html" alt="tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor" shape="rect" coords="0,0,467,24">
+</map>
+<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="bc85684238d4bb5e422cb8ea0bdc438f"></a><!-- doxytag: member="tbb::concurrent_vector::size_type" ref="bc85684238d4bb5e422cb8ea0bdc438f" args="" -->
-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="ac7083635ab59834e9afc15e6c168df5"></a><!-- doxytag: member="tbb::concurrent_vector::allocator_type" ref="ac7083635ab59834e9afc15e6c168df5" args="" -->
-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="4543d7d45b2e461d3f8ef416974ec1f1"></a><!-- doxytag: member="tbb::concurrent_vector::value_type" ref="4543d7d45b2e461d3f8ef416974ec1f1" args="" -->
-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="e655e67dd14ed6d0cbfe7981d5fa350e"></a><!-- doxytag: member="tbb::concurrent_vector::difference_type" ref="e655e67dd14ed6d0cbfe7981d5fa350e" args="" -->
-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="8c29033785d76e240ea96ae40610275d"></a><!-- doxytag: member="tbb::concurrent_vector::reference" ref="8c29033785d76e240ea96ae40610275d" args="" -->
-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="b0b2a6241ab3fa9ab4f4074893fecd47"></a><!-- doxytag: member="tbb::concurrent_vector::const_reference" ref="b0b2a6241ab3fa9ab4f4074893fecd47" args="" -->
-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="74319c908a32d5dcdc6a080f9c2b8803"></a><!-- doxytag: member="tbb::concurrent_vector::pointer" ref="74319c908a32d5dcdc6a080f9c2b8803" args="" -->
-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="dd80729019220cdb80872ea6b905ffb1"></a><!-- doxytag: member="tbb::concurrent_vector::const_pointer" ref="dd80729019220cdb80872ea6b905ffb1" args="" -->
-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="a049674e7f386de3ea09ff2ed6d6bbbe"></a><!-- doxytag: member="tbb::concurrent_vector::iterator" ref="a049674e7f386de3ea09ff2ed6d6bbbe" args="" -->
-typedef internal::vector_iterator<<br>
- <a class="el" href="a00136.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="b51a1baa7da67e283806c0d4f2fe9c69"></a><!-- doxytag: member="tbb::concurrent_vector::const_iterator" ref="b51a1baa7da67e283806c0d4f2fe9c69" args="" -->
-typedef internal::vector_iterator<<br>
- <a class="el" href="a00136.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="2c7e4d252bef7af22286041c39c62abe"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="2c7e4d252bef7af22286041c39c62abe" args="" -->
-typedef std::reverse_iterator<<br>
- iterator > </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="c59c3f9412b666a31a9052b789fb58bc"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="c59c3f9412b666a31a9052b789fb58bc" args="" -->
-typedef std::reverse_iterator<<br>
- const_iterator > </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="0c3901b092e9e8185bdc3cae5913e625"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="0c3901b092e9e8185bdc3cae5913e625" args="" -->
-typedef std::reverse_iterator<<br>
- iterator, 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="426145d7bd5913bc08e701c14b221046"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="426145d7bd5913bc08e701c14b221046" args="" -->
-typedef std::reverse_iterator<<br>
- const_iterator, 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="61fd90288dba6f8808d6dafe9a249ec5"></a><!-- doxytag: member="tbb::concurrent_vector::range_type" ref="61fd90288dba6f8808d6dafe9a249ec5" args="" -->
-typedef generic_range_type<<br>
- iterator > </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="d6ddf0312a820a98efd9a5f394cb9dbd"></a><!-- doxytag: member="tbb::concurrent_vector::const_range_type" ref="d6ddf0312a820a98efd9a5f394cb9dbd" args="" -->
-typedef generic_range_type<<br>
- const_iterator > </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="34035ddb9e2a27f2f0a1f6a2a16730cf"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::value_type" ref="34035ddb9e2a27f2f0a1f6a2a16730cf" args="" -->
+typedef concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#34035ddb9e2a27f2f0a1f6a2a16730cf">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="2c8ca9cabfcd30ad5943324c853664b5"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2c8ca9cabfcd30ad5943324c853664b5" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">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="dd8a200b99a8088435a37934b58fe335"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="dd8a200b99a8088435a37934b58fe335" args="(const concurrent_vector &vector, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00136.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="64432f13f7b29bfe4acfb5568f34f3a8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="64432f13f7b29bfe4acfb5568f34f3a8" args="(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())" -->
-template<class M> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00136.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="2a2e261dfe1cab3f73f7b1a94137cfca"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2a2e261dfe1cab3f73f7b1a94137cfca" args="(size_type n)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">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="3883a8a908b44e249a57f454de3f55d8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="3883a8a908b44e249a57f454de3f55d8" args="(size_type n, const_reference t, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">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="4450de83c5862ea4bcd9443fd7e67419"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="4450de83c5862ea4bcd9443fd7e67419" args="(I first, I last, const allocator_type &a=allocator_type())" -->
-template<class I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">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="691f0f3cda3e489c37a657016e375eaf"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="691f0f3cda3e489c37a657016e375eaf" args="(const concurrent_vector &vector)" -->
-<a class="el" href="a00136.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00136.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="19f4ab88a01b0fd056af3bba463e7bd6"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="19f4ab88a01b0fd056af3bba463e7bd6" args="(const concurrent_vector< T, M > &vector)" -->
-template<class M> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00136.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00136.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="a00136.html#30484e3959892fd5392fa93c873c31f0">grow_by</a> (size_type delta)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements.  <a href="#30484e3959892fd5392fa93c873c31f0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a> (size_type delta)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#38274ab3f772ecba600c7daca7690102">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="#38274ab3f772ecba600c7daca7690102"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">grow_by</a> (size_type delta, const_reference t)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a> (size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Append minimal sequence of elements such that <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>>=n.  <a href="#47fe588214dd5fa06ab6e8ab78d83874"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a> (size_type n)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a> (const_reference item) iterator push_back(const _reference item)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Push item.  <a href="#e94e038f915c0268fdf2d3d7f87d81b8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a> (size_type index)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index.  <a href="#4c52f2950bb1832886bd4458eb09d7eb"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6fade5c732cc95274d1d8277ea619d1"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="c6fade5c732cc95274d1d8277ea619d1" args="(size_type index) const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">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="0c073ca43e787c7cbf7b0e26d2221748"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="0c073ca43e787c7cbf7b0e26d2221748" args="(size_type index)" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at</a> (size_type index)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. Throws exceptions on errors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23e14a38af748edff96a7adc3a0f1c58"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="23e14a38af748edff96a7adc3a0f1c58" args="(size_type index) const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">at</a> (size_type index) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. Throws exceptions on errors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4c6ffff3bf08b92939aa2fc516edfba"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="a4c6ffff3bf08b92939aa2fc516edfba" args="(size_t grainsize=1)" -->
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">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="3d09ccfb581b879ae64203741035e193"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="3d09ccfb581b879ae64203741035e193" args="(size_t grainsize=1) const " -->
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">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="715fe313c4a9c22731cc404dd80c9ec9"></a><!-- doxytag: member="tbb::concurrent_vector::size" ref="715fe313c4a9c22731cc404dd80c9ec9" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. It may include elements under construction. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6426cb93cf20d3af40f3c90f1f0481a"></a><!-- doxytag: member="tbb::concurrent_vector::empty" ref="c6426cb93cf20d3af40f3c90f1f0481a" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return true if vector is not empty or has elements under construction at least. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ed6b9ae7217af5103d974045b6f5cd5"></a><!-- doxytag: member="tbb::concurrent_vector::capacity" ref="3ed6b9ae7217af5103d974045b6f5cd5" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">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="#5a0ce05026994b010018f72cfdeb72c1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8dfb0cb0eef96d440b4dcf801807a718"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="8dfb0cb0eef96d440b4dcf801807a718" args="(size_type n)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a> (size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector. Not thread-safe. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98ce6b2c6d2622f0c030b46dfac3880c"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="98ce6b2c6d2622f0c030b46dfac3880c" args="(size_type n, const_reference t)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a> (size_type n, const_reference t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector, copy t for new elements. Not thread-safe. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1693d1da41b1a8235871be9c6633be35"></a><!-- doxytag: member="tbb::concurrent_vector::compact" ref="1693d1da41b1a8235871be9c6633be35" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit()</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03c6f4cf66532bf4cc907ee738a9a186"></a><!-- doxytag: member="tbb::concurrent_vector::shrink_to_fit" ref="03c6f4cf66532bf4cc907ee738a9a186" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c248a017f0576df3e7cd99627836fd6"></a><!-- doxytag: member="tbb::concurrent_vector::max_size" ref="2c248a017f0576df3e7cd99627836fd6" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">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="730b23a251ecb6d37f692fb22f38e029"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="730b23a251ecb6d37f692fb22f38e029" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">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="c0b51160e5a764982ec97a455f94f2c6"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="c0b51160e5a764982ec97a455f94f2c6" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">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="78a06182276ff758788d4c0623ae0d71"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="78a06182276ff758788d4c0623ae0d71" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">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="1e6aa764ce5a1cbd24526f68bc0a2f6b"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="1e6aa764ce5a1cbd24526f68bc0a2f6b" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">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="f88fcf1c920693c39bd9709db33c199f"></a><!-- doxytag: member="tbb::concurrent_vector::cbegin" ref="f88fcf1c920693c39bd9709db33c199f" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">cbegin</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="0c15a5d0f1cf75d687dabba07da1d46b"></a><!-- doxytag: member="tbb::concurrent_vector::cend" ref="0c15a5d0f1cf75d687dabba07da1d46b" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03a091f7355a3c0c03f839893695f372"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator *" ref="03a091f7355a3c0c03f839893695f372" args="() const " -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#03a091f7355a3c0c03f839893695f372">operator *</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="5e220926d09236d98f04fe0721e5f9a1"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="5e220926d09236d98f04fe0721e5f9a1" args="()" -->
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a> ()</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="302f02e5deec0a67b872e9cfb08d9e60"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator->" ref="302f02e5deec0a67b872e9cfb08d9e60" args="() const " -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#302f02e5deec0a67b872e9cfb08d9e60">operator-></a> () const </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="290119a4eb43cd6a9e98fa17016ba3c2"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="290119a4eb43cd6a9e98fa17016ba3c2" args="()" -->
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">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="9f9c103e18d5f212703805354074ad44"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="9f9c103e18d5f212703805354074ad44" args="() const " -->
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">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="d438b9b32ea3a8ffb703015b6dce055b"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="d438b9b32ea3a8ffb703015b6dce055b" args="() const " -->
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">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="db78a1d28c9c966050e8a2926d834a33"></a><!-- doxytag: member="tbb::concurrent_vector::crbegin" ref="db78a1d28c9c966050e8a2926d834a33" args="() const " -->
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">crbegin</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="fff9cece89438587997ebedf93c5e962"></a><!-- doxytag: member="tbb::concurrent_vector::crend" ref="fff9cece89438587997ebedf93c5e962" args="() const " -->
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">crend</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="15181759c0bfa2ddce5d10c7550e0002"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="15181759c0bfa2ddce5d10c7550e0002" args="()" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">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="502615a858eb9fa0390ee59169065e90"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="502615a858eb9fa0390ee59169065e90" args="() const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">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="41ce48d6015a1a2812d41cf620ec3476"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="41ce48d6015a1a2812d41cf620ec3476" args="()" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">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="bd518e204107d07fd08d0ec5bdfd383d"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="bd518e204107d07fd08d0ec5bdfd383d" args="() const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">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="2fdba8e90de6a4d2300222236d46758e"></a><!-- doxytag: member="tbb::concurrent_vector::get_allocator" ref="2fdba8e90de6a4d2300222236d46758e" args="() const " -->
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">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="423e5aa15e0e3309ad86d026fd85f6f6"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="423e5aa15e0e3309ad86d026fd85f6f6" args="(size_type n, const_reference t)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">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="93a06b3112cb804f42f40efb5e7387b4"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="93a06b3112cb804f42f40efb5e7387b4" args="(I first, I last)" -->
-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="a00136.html#93a06b3112cb804f42f40efb5e7387b4">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="96c9c4bd968ed3edb8dd276854d2dae0"></a><!-- doxytag: member="tbb::concurrent_vector::swap" ref="96c9c4bd968ed3edb8dd276854d2dae0" args="(concurrent_vector &vector)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00136.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="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear container while keeping memory allocated.  <a href="#26f937a359a66b6aae904c3cd9a3c444"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da2444b28bb840d38f60d0030333a5fc"></a><!-- doxytag: member="tbb::concurrent_vector::~concurrent_vector" ref="da2444b28bb840d38f60d0030333a5fc" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">~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="bb5ae659871478f1f5c68039e1273e12"></a><!-- doxytag: member="tbb::concurrent_vector::internal_vector_base" ref="bb5ae659871478f1f5c68039e1273e12" args="() const " -->
-const internal::concurrent_vector_base_v3 & </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="30086a58bff79a91103723be20916b96"></a><!-- doxytag: member="tbb::concurrent_vector::internal::vector_iterator" ref="30086a58bff79a91103723be20916b96" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></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"><b>generic_range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>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="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 T, class A><br>
- class tbb::concurrent_vector< T, A ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</h3>
 
-Concurrent vector container. 
-<p>
-<a class="el" href="a00136.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="a00136.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.1</b></dt><dd><ul>
-<li>Fixed guarantees of <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a> to get the end [...]
-</dd></dl>
-<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="a00136.html#38274ab3f772ecba600c7daca7690102">grow_by(size_type n, const_reference t)</a> growth using copying const [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="26f937a359a66b6aae904c3cd9a3c444"></a><!-- doxytag: member="tbb::concurrent_vector::clear" ref="26f937a359a66b6aae904c3cd9a3c444" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::clear           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Clear container while keeping memory allocated. 
-<p>
-To free up the memory, use in conjunction with method <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact()</a>. Not thread safe 
-</div>
-</div><p>
-<a class="anchor" name="473a59a4c9308b93411b898b3110d26c"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="473a59a4c9308b93411b898b3110d26c" args="(size_type delta, const_reference t)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>delta</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"> <em>t</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Returns iterator pointing to the first new element. 
-</div>
-</div><p>
-<a class="anchor" name="38274ab3f772ecba600c7daca7690102"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="38274ab3f772ecba600c7daca7690102" args="(size_type delta, const_reference t)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>delta</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"> <em>t</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Grow by "delta" elements using copying constuctor. 
-<p>
-Returns old size. 
-</div>
-</div><p>
-<a class="anchor" name="c8177b1865270ea68aa1ab9148e5e35e"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="c8177b1865270ea68aa1ab9148e5e35e" args="(size_type delta)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>delta</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Returns iterator pointing to the first new element. 
-</div>
-</div><p>
-<a class="anchor" name="30484e3959892fd5392fa93c873c31f0"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="30484e3959892fd5392fa93c873c31f0" args="(size_type delta)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>delta</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Grow by "delta" elements. 
-<p>
-Returns old size. 
-</div>
-</div><p>
-<a class="anchor" name="a7e3b67c8ccab16d0aecc80899ae799d"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="a7e3b67c8ccab16d0aecc80899ae799d" args="(size_type n)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>n</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. 
-</div>
-</div><p>
-<a class="anchor" name="47fe588214dd5fa06ab6e8ab78d83874"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="47fe588214dd5fa06ab6e8ab78d83874" args="(size_type n)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>n</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Append minimal sequence of elements such that <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>>=n. 
-<p>
-The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. 
-</div>
-</div><p>
-<a class="anchor" name="4c52f2950bb1832886bd4458eb09d7eb"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="4c52f2950bb1832886bd4458eb09d7eb" args="(size_type index)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">reference <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::operator[]           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>index</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>. 
-</div>
-</div><p>
-<a class="anchor" name="e94e038f915c0268fdf2d3d7f87d81b8"></a><!-- doxytag: member="tbb::concurrent_vector::push_back" ref="e94e038f915c0268fdf2d3d7f87d81b8" args="(const_reference item) iterator push_back(const _reference item)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::push_back           </td>
-          <td>(</td>
-          <td class="paramtype">const_reference </td>
-          <td class="paramname"> <em>item</em>          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Push item. 
-<p>
-Returns iterator pointing to the new element. 
-</div>
-</div><p>
-<a class="anchor" name="5a0ce05026994b010018f72cfdeb72c1"></a><!-- doxytag: member="tbb::concurrent_vector::reserve" ref="5a0ce05026994b010018f72cfdeb72c1" args="(size_type n)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, class A> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>< T, A >::reserve           </td>
-          <td>(</td>
-          <td class="paramtype">size_type </td>
-          <td class="paramname"> <em>n</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Allocate enough space to grow to size n without having to allocate more memory later. 
+Allows write access to elements and combines data access, locking, and garbage collection. 
 <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. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00283.html">concurrent_vector.h</a></ul>
+<li><a class="el" href="a00280.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00136.png b/doc/html/a00136.png
new file mode 100644
index 0000000..1faefb1
Binary files /dev/null and b/doc/html/a00136.png differ
diff --git a/doc/html/a00137.html b/doc/html/a00137.html
index 85a1150..c7b7f91 100644
--- a/doc/html/a00137.html
+++ b/doc/html/a00137.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,25 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00137.html">empty_task</a></div>
-<h1>tbb::empty_task Class Reference<br>
-<small>
-[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::empty_task" --><!-- doxytag: inherits="tbb::task" -->task that does nothing. Useful for synchronization.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00135.html">concurrent_hash_map</a>::<a class="el" href="a00137.html">bucket_accessor</a></div>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::bucket_accessor" -->bucket accessor is to find, rehash, acquire a lock, and access a bucket  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00354.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00280.html">concurrent_hash_map.h</a>></code>
 <p>
-Inherits <a class="el" href="a00166.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::empty_task:<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="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 Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="53584e6b0cf6cda95f31fcbfabb311fe"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="53584e6b0cf6cda95f31fcbfabb311fe" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
+ </td><td class="memItemRight" valign="bottom"><b>bucket_accessor</b> (<a class="el" href="a00135.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b75959ce5a971b05cfefcbc1d09a022"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::acquire" ref="7b75959ce5a971b05cfefcbc1d09a022" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a> (<a class="el" href="a00135.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">find a bucket by masked hashcode, optionally rehash, and acquire the lock <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adf8e405df5787351fe816c42042b9ec"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::is_writer" ref="adf8e405df5787351fe816c42042b9ec" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html#adf8e405df5787351fe816c42042b9ec">is_writer</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">check whether bucket is locked for write <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e98ad1b46ed35fb4a92d65c16c6982d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::operator()" ref="7e98ad1b46ed35fb4a92d65c16c6982d" args="()" -->
+bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32b2b1c83ca85859bc5276022821152d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::upgrade_to_writer" ref="32b2b1c83ca85859bc5276022821152d" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-task that does nothing. Useful for synchronization. 
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</h3>
+
+bucket accessor is to find, rehash, acquire a lock, and access a bucket 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00354.html">task.h</a></ul>
+<li><a class="el" href="a00280.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00138.html b/doc/html/a00138.html
index 1aa6ea7..5b37e1c 100644
--- a/doc/html/a00138.html
+++ b/doc/html/a00138.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,162 +21,65 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00138.html">enumerable_thread_specific</a></div>
-<h1>tbb::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</h1><!-- doxytag: class="tbb::enumerable_thread_specific" -->The thread local class template.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00135.html">concurrent_hash_map</a>::<a class="el" href="a00138.html">const_accessor</a></div>
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00292.html">enumerable_thread_specific.h</a>></code>
+<code>#include <<a class="el" href="a00280.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:
+<p><center><img src="a00138.png" usemap="#tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map" border="0" alt=""></center>
+<map name="tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map">
+<area href="a00136.html" alt="tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor" shape="rect" coords="0,56,467,80">
+</map>
+<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="60047d25605a1ef993c49234e9ac5c2d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::allocator_type" ref="60047d25605a1ef993c49234e9ac5c2d" args="" -->
-typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14b5967a627853440608619a07c9281a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::value_type" ref="14b5967a627853440608619a07c9281a" args="" -->
-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="06ff8c90338e3f76201e56ac2e8bd566"></a><!-- doxytag: member="tbb::enumerable_thread_specific::reference" ref="06ff8c90338e3f76201e56ac2e8bd566" args="" -->
-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="cc538a9b0919cba06e9807984a840710"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_reference" ref="cc538a9b0919cba06e9807984a840710" args="" -->
-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="de58e04a639ecadf5e021b27c430cd32"></a><!-- doxytag: member="tbb::enumerable_thread_specific::pointer" ref="de58e04a639ecadf5e021b27c430cd32" args="" -->
-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="3ee05b7e9b137913fc2f946d7edb6325"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_pointer" ref="3ee05b7e9b137913fc2f946d7edb6325" args="" -->
-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="f7104b09f6dc1f8035ea978f56f9a090"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size_type" ref="f7104b09f6dc1f8035ea978f56f9a090" args="" -->
-typedef internal_collection_type::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="631ed3389c35ba4b90b7d1be0e291d86"></a><!-- doxytag: member="tbb::enumerable_thread_specific::difference_type" ref="631ed3389c35ba4b90b7d1be0e291d86" args="" -->
-typedef internal_collection_type::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="006bd5182f81d6d01cbb558c0b500a29"></a><!-- doxytag: member="tbb::enumerable_thread_specific::iterator" ref="006bd5182f81d6d01cbb558c0b500a29" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00136.html">internal_collection_type</a>,<br>
- 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="a59d5bae106a5e631fe164be9a261b72"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_iterator" ref="a59d5bae106a5e631fe164be9a261b72" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00136.html">internal_collection_type</a>,<br>
- const 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="8d695d7c22817587116f27089cd190d8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range_type" ref="8d695d7c22817587116f27089cd190d8" args="" -->
-typedef generic_range_type<<br>
- iterator > </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="73dc6b3dd06c14942c641a5ae924e355"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_range_type" ref="73dc6b3dd06c14942c641a5ae924e355" args="" -->
-typedef generic_range_type<<br>
- const_iterator > </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="b5de4197079009b1cfd8bdeb594c6428"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::value_type" ref="b5de4197079009b1cfd8bdeb594c6428" args="" -->
+typedef const concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#b5de4197079009b1cfd8bdeb594c6428">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="632e351d5269ac609b08dba19282f3a3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="632e351d5269ac609b08dba19282f3a3" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor, which leads to default construction of local copies. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="e5698930b84c098bb6d87175b8b50306"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="e5698930b84c098bb6d87175b8b50306" args="(Finit _finit)" -->
-template<typename Finit> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00138.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a> (Finit _finit)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">construction with initializer method <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0466c43272d8458185e980fc2dc4abe2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="0466c43272d8458185e980fc2dc4abe2" args="(const T &_exemplar)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a> (const T &_exemplar)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constuction with exemplar, which leads to copy construction of local copies. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41176526161d6fef1bdd19c2db7ded4d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::~enumerable_thread_specific" ref="41176526161d6fef1bdd19c2db7ded4d" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e55c7c3f0acd7fd823a07957e71a7462"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::empty" ref="e55c7c3f0acd7fd823a07957e71a7462" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a> () const </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="ceb691814a0001241c43595d309cf615"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="ceb691814a0001241c43595d309cf615" args="()" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a> ()</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="09575d1a2dfeb8cd896c27cdd3770517"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::release" ref="09575d1a2dfeb8cd896c27cdd3770517" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">returns reference to local, discarding exists <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9505351eace34ed7130257adcae91706"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="9505351eace34ed7130257adcae91706" args="(bool &exists)" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">local</a> (bool &exists)</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="d95b7a39a08b7ab256dfff2ca37cdb75"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator *" ref="d95b7a39a08b7ab256dfff2ca37cdb75" args="() const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="302a4d6f55f852d5b7a6679e0e00316e"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size" ref="302a4d6f55f852d5b7a6679e0e00316e" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</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="6fc0491f6420ffe38c48786e7b9ab042"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator->" ref="6fc0491f6420ffe38c48786e7b9ab042" args="() const " -->
+const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#6fc0491f6420ffe38c48786e7b9ab042">operator-></a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of local copies. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad23345a722622199deaa4dfd243d9f8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::empty" ref="ad23345a722622199deaa4dfd243d9f8" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</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="6eedb35a3ca397dd289ed5ca6fb4d95d"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::const_accessor" ref="6eedb35a3ca397dd289ed5ca6fb4d95d" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">true if there have been no local copies created <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="225f945c810397c6a54d5b8317dc5843"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="225f945c810397c6a54d5b8317dc5843" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">begin iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="44c0b67ebb56b2ae1fa260d9e2bd1e99"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="44c0b67ebb56b2ae1fa260d9e2bd1e99" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">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="ba6674c6102a6faf8f96d131497654b3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="ba6674c6102a6faf8f96d131497654b3" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">begin</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">begin const iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89811890e6a77f1e0cfc6c24ed35d09b"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="89811890e6a77f1e0cfc6c24ed35d09b" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">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="56f6124f5870e26433a5bb2b71e4b7e9"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="56f6124f5870e26433a5bb2b71e4b7e9" args="(size_t grainsize=1)" -->
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a> (size_t grainsize=1)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get range for parallel algorithms. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32dd1d88e42dc1faccceca244b12b6c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="a32dd1d88e42dc1faccceca244b12b6c" args="(size_t grainsize=1) const " -->
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">range</a> (size_t grainsize=1) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const range for parallel algorithms. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c890601a45273ef759e64ac2fe75cb6a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::clear" ref="c890601a45273ef759e64ac2fe75cb6a" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys local copies. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f109a2bbe9ce390f78363a2d17a88ed5"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="f109a2bbe9ce390f78363a2d17a88ed5" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" -->
-template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3be03082943460305b8022693c04b4a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="c3be03082943460305b8022693c04b4a" args="(const enumerable_thread_specific &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8226b10dbb71cfe467eb85ac37b91ff0"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="8226b10dbb71cfe467eb85ac37b91ff0" args="(const enumerable_thread_specific &other)" -->
-<a class="el" href="a00138.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b124465416967c23b12841170a7f0263"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="b124465416967c23b12841170a7f0263" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" -->
-template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00138.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="dd6b27d9c98297220b08732d9087a5a8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine" ref="dd6b27d9c98297220b08732d9087a5a8" args="(combine_func_t f_combine)" -->
-template<typename combine_func_t> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4abce9638ef2693d813d820af59bb6e2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine_each" ref="4abce9638ef2693d813d820af59bb6e2" args="(combine_func_t f_combine)" -->
-template<typename combine_func_t> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</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="e002771760f510e06c03e0a198286172"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::~const_accessor" ref="e002771760f510e06c03e0a198286172" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#e002771760f510e06c03e0a198286172">~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="45364b2f249ceb935cff05c29fcfcf5c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="45364b2f249ceb935cff05c29fcfcf5c" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b></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"><b>generic_range_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::concurrent_hash_map< Key, T, HashCompare, Allocator >" ref="d062d8ecb243a6ec62fa30bca52a1bcf" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map< Key, T, HashCompare, Allocator ></b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A generic range, used to create range objects from the iterators. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>padded_element</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd77aff56c12366acc02d0f1588a706"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::accessor" ref="ddd77aff56c12366acc02d0f1588a706" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The padded elements; padded to avoid false sharing. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename Allocator = cache_aligned_allocator<T>, ets_key_usage_type ETS_key_type = ets_no_key><br>
- class tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
 
-The thread local class template. 
+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="a00292.html">enumerable_thread_specific.h</a></ul>
+<li><a class="el" href="a00280.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00138.png b/doc/html/a00138.png
new file mode 100644
index 0000000..2282f69
Binary files /dev/null and b/doc/html/a00138.png differ
diff --git a/doc/html/a00139.html b/doc/html/a00139.html
index e3ddfee..9c0b372 100644
--- a/doc/html/a00139.html
+++ b/doc/html/a00139.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,181 +21,143 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00139.html">filter</a></div>
-<h1>tbb::filter Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00240.html">strict_ppl</a>::<a class="el" href="a00139.html">concurrent_queue</a></div>
+<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::filter" -->A stage in a pipeline.  
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::strict_ppl::concurrent_queue" -->A high-performance thread-safe non-blocking concurrent queue.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00347.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00292.html">concurrent_queue.h</a>></code>
 <p>
-Inherited by <a class="el" href="a00175.html">tbb::thread_bound_filter</a>.
-<p>
-Inheritance diagram for tbb::filter:<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">
+<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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="682c3978d5cb0620000994f11c44a476"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::value_type" ref="682c3978d5cb0620000994f11c44a476" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#682c3978d5cb0620000994f11c44a476">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="a8d725c50a9834bb7af5b67c0aff92b8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::reference" ref="a8d725c50a9834bb7af5b67c0aff92b8" args="" -->
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">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="4d48e7ff93f81636bca2c74f7da34750"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_reference" ref="4d48e7ff93f81636bca2c74f7da34750" args="" -->
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">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"><a class="anchor" name="8fc30e93f8342a1960357f71e4fe8a2b"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::size_type" ref="8fc30e93f8342a1960357f71e4fe8a2b" args="" -->
+typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">processes multiple items in parallel and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="068576d16c7e4e05d52f9db7a45b5b65"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::difference_type" ref="068576d16c7e4e05d52f9db7a45b5b65" args="" -->
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">processes items one at a time; all such filters process items in the same order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order</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="5a3956341728eaa558d8827063718cac"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::allocator_type" ref="5a3956341728eaa558d8827063718cac" args="" -->
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">processes items one at a time and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order</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="9736ac047d6da3363895c7e5b121d0c4"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::iterator" ref="9736ac047d6da3363895c7e5b121d0c4" args="" -->
+typedef internal::concurrent_queue_iterator<<br>
+ <a class="el" href="a00139.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">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> { <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> =  current_version | filter_is_out_of_order, 
-<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> =  current_version | filter_is_serial, 
-<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> =  current_version | filter_is_serial | filter_is_out_of_order, 
-<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> =  serial_in_order
- }</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cd76d19af8c78be1bafc6ca0123ac0d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_iterator" ref="9cd76d19af8c78be1bafc6ca0123ac0d" args="" -->
+typedef internal::concurrent_queue_iterator<<br>
+ <a class="el" href="a00139.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="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7c48a05a94a1f4f98fdfadfbef98ecf6"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="7c48a05a94a1f4f98fdfadfbef98ecf6" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</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="cd53206c4795ef2df5df26b795caf692"></a><!-- doxytag: member="tbb::filter::is_ordered" ref="cd53206c4795ef2df5df26b795caf692" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="25209656c84f2f9b030e2f9162713341"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="25209656c84f2f9b030e2f9162713341" args="(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())" -->
+template<typename InputIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00139.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</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"><a class="anchor" name="15c29cae5d237e6d63dbfe5c94af89d5"></a><!-- doxytag: member="tbb::filter::is_bound" ref="15c29cae5d237e6d63dbfe5c94af89d5" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a6b98ea11a867db8ac868f0113ca429"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="8a6b98ea11a867db8ac868f0113ca429" args="(const concurrent_queue &src, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00139.html">concurrent_queue</a> &src, const <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if filter is thread-bound. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a> (void *item)=0</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="830b33753d6b149c366344e29b2edd8c"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::~concurrent_queue" ref="830b33753d6b149c366344e29b2edd8c" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a> ()</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="#fa1b3dc1f4f47563ccab7f4d92f5b543"></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="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</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="73c47563ffcc4c2f6452f25a04ebe2e2"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::push" ref="73c47563ffcc4c2f6452f25a04ebe2e2" args="(const T &source)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a> (const T &source)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy filter.  <a href="#66d159f362293e3964ba3da8bc1d2604"></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="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a> (void *)</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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a> (T &result)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys item if pipeline was cancelled.  <a href="#56275eb889c77c4807967133e21401bd"></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="f1111979b4afbde1a6c1873577a005ae"></a><!-- doxytag: member="tbb::filter::filter" ref="f1111979b4afbde1a6c1873577a005ae" args="(bool is_serial_)" -->
- </td><td class="memItemRight" valign="bottom"><b>filter</b> (bool is_serial_)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#ae31ca0db34ef96ef1e74aa0d28c95f8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eaa35a5274606779802e9a669a706260"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_size" ref="eaa35a5274606779802e9a669a706260" args="() const " -->
+<a class="el" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#eaa35a5274606779802e9a669a706260">unsafe_size</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3f49df3c34a3e5a8884001c30230a94"></a><!-- doxytag: member="tbb::filter::filter" ref="a3f49df3c34a3e5a8884001c30230a94" args="(mode filter_mode)" -->
- </td><td class="memItemRight" valign="bottom"><b>filter</b> (<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the number of items in the queue; thread unsafe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3f6fce0cfa2d581d6f3b47e0613ad64"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::empty" ref="f3f6fce0cfa2d581d6f3b47e0613ad64" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a> () 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="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::filter::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to size()==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c32e8e84c0524155133b4aae32d2a827"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::clear" ref="c32e8e84c0524155133b4aae32d2a827" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#c32e8e84c0524155133b4aae32d2a827">clear</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::filter::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></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="f034f70caef445fe8abc9113ec926a8d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::get_allocator" ref="f034f70caef445fe8abc9113ec926a8d" args="() const " -->
+<a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b211ee58bada099e24280d478017cbff"></a><!-- doxytag: member="tbb::filter::pipeline" ref="b211ee58bada099e24280d478017cbff" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>pipeline</b></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="6297f48808dd7c14e6c2fe81559ca190"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="6297f48808dd7c14e6c2fe81559ca190" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::filter::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1569f70e70521fe71944a5b0138c6ef5"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="1569f70e70521fe71944a5b0138c6ef5" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
 
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-A stage in a pipeline. 
-<p>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf"></a><!-- doxytag: member="tbb::filter::mode" ref="d3b6ed2c517144199d0c39c62ddfd8cf" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter::mode</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3e6746f7b6ecfbc16f781665ac51112"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="e3e6746f7b6ecfbc16f781665ac51112" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
 
-<p>
-<dl compact><dt><b>Enumerator: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><!-- doxytag: member="parallel" ref="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><!-- doxytag: member="serial_in_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><!-- doxytag: member="serial_out_of_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237"></a><!-- doxytag: member="serial" ref="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237" args="" -->serial</em> </td><td>
-<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>use serial_in_order instead </dd></dl>
-</td></tr>
-</table>
-</dl>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83bf90849c08f44d25dd7a3b207a8956"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="83bf90849c08f44d25dd7a3b207a8956" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
 
-</div>
-</div><p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="66d159f362293e3964ba3da8bc1d2604"></a><!-- doxytag: member="tbb::filter::~filter" ref="66d159f362293e3964ba3da8bc1d2604" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::filter::~filter           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
 
-<p>
-Destroy filter. 
-<p>
-If the filter was added to a pipeline, the pipeline must be destroyed first. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="56275eb889c77c4807967133e21401bd"></a><!-- doxytag: member="tbb::filter::finalize" ref="56275eb889c77c4807967133e21401bd" args="(void *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void tbb::filter::finalize           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
+ class tbb::strict_ppl::concurrent_queue< T, A ></h3>
 
+A high-performance thread-safe non-blocking concurrent queue. 
 <p>
-Destroys item if pipeline was cancelled. 
+Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
 <p>
-Required to prevent memory leaks. Note it can be called concurrently even for serial filters. 
-</div>
-</div><p>
-<a class="anchor" name="fa1b3dc1f4f47563ccab7f4d92f5b543"></a><!-- doxytag: member="tbb::filter::operator()" ref="fa1b3dc1f4f47563ccab7f4d92f5b543" args="(void *item)=0" -->
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="ae31ca0db34ef96ef1e74aa0d28c95f8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::try_pop" ref="ae31ca0db34ef96ef1e74aa0d28c95f8" args="(T &result)" -->
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename T, typename A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname">virtual void* tbb::filter::operator()           </td>
+          <td class="memname">bool <a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop           </td>
           <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>item</em>          </td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>result</em>          </td>
           <td> ) </td>
-          <td width="100%"><code> [pure virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Operate on an item from the input stream, and return item for output stream. 
+Attempt to dequeue an item from head of queue. 
 <p>
-Returns NULL if filter is a sink. 
+Does not wait for item to become available. Returns true if successful; false otherwise. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<li><a class="el" href="a00292.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00140.html b/doc/html/a00140.html
index ba81446..b9f5643 100644
--- a/doc/html/a00140.html
+++ b/doc/html/a00140.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::deprecated::concurrent_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,27 +21,128 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00140.html">final_scan_tag</a></div>
-<h1>tbb::final_scan_tag Struct Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00140.html">concurrent_queue</a></div>
+<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::final_scan_tag" -->Used to indicate that the final scan is being performed.  
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::deprecated::concurrent_queue" --><!-- doxytag: inherits="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00329.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00292.html">concurrent_queue.h</a>></code>
 <p>
-<a href="a00037.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:
+<p><center><img src="a00140.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::deprecated::concurrent_queue< T, A >_map">
+<area href="a00134.html" alt="tbb::concurrent_bounded_queue< T, A >" shape="rect" coords="0,0,257,24">
+</map>
+<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>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06888e4a548788fcb2c15542d428d8c9"></a><!-- doxytag: member="tbb::final_scan_tag::is_final_scan" ref="06888e4a548788fcb2c15542d428d8c9" args="()" -->
-static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</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="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
+typedef <a class="el" href="a00134.html">concurrent_bounded_queue</a><<br>
+ T, A >::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="7117842ce3ed7c5147d3c886922e64d0"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::const_iterator" ref="7117842ce3ed7c5147d3c886922e64d0" args="" -->
+typedef <a class="el" href="a00134.html">concurrent_bounded_queue</a><<br>
+ T, A >::const_iterator </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="aaf19bd7337b72f3131ece60f7315ef7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="aaf19bd7337b72f3131ece60f7315ef7" args="(const A &a=A())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a> (const A &a=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="fc092b9082f233482f3513fc3bb670f7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="fc092b9082f233482f3513fc3bb670f7" args="(const concurrent_queue &src, const A &a=A())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00140.html">concurrent_queue</a> &src, const A &a=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="383187b910f8c3ca27a39c1638566f15"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="383187b910f8c3ca27a39c1638566f15" args="(InputIterator begin, InputIterator end, const A &a=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="a00140.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a> (InputIterator begin, InputIterator end, const A &a=A())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">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="#7c45561bafe71107d09b2bc1b8f4e681"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html#48da3536245318af6cb5fd58bac78039">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="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35fbb0d7e135545eb1daec2b4ae894cd"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="35fbb0d7e135545eb1daec2b4ae894cd" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62f31fe653e1158e64ddb0e163d0335c"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="62f31fe653e1158e64ddb0e163d0335c" args="() const " -->
+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="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
+const_iterator </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="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+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>
-Used to indicate that the final scan is being performed. 
+<h3>template<typename T, class A = cache_aligned_allocator<T>><br>
+ class tbb::deprecated::concurrent_queue< T, A ></h3>
+
+A high-performance thread-safe blocking concurrent bounded queue. 
+<p>
+This is the pre-PPL TBB concurrent queue which support boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="48da3536245318af6cb5fd58bac78039"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::pop_if_present" ref="48da3536245318af6cb5fd58bac78039" args="(T &destination)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue</a>< T, A >::pop_if_present           </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>destination</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. <dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Use <a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop()</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="7c45561bafe71107d09b2bc1b8f4e681"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::push_if_not_full" ref="7c45561bafe71107d09b2bc1b8f4e681" args="(const T &source)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00140.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
+          <td>(</td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"> <em>source</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enqueue an item at tail of queue if queue is not already full. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00329.html">parallel_scan.h</a></ul>
+Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00292.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00140.png b/doc/html/a00140.png
new file mode 100644
index 0000000..6aac5a0
Binary files /dev/null and b/doc/html/a00140.png differ
diff --git a/doc/html/a00141.html b/doc/html/a00141.html
index 680d8d6..ef947bc 100644
--- a/doc/html/a00141.html
+++ b/doc/html/a00141.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::movable_exception< ExceptionData > Class Template Reference</title>
+<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,142 +21,570 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00141.html">movable_exception</a></div>
-<h1>tbb::movable_exception< ExceptionData > Class Template Reference</h1><!-- doxytag: class="tbb::movable_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00141.html">concurrent_vector</a></div>
+<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00242.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_vector" -->Concurrent vector container.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00293.html">concurrent_vector.h</a>></code>
 <p>
-Inherits <a class="el" href="a00172.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="a00086.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00021.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="bc85684238d4bb5e422cb8ea0bdc438f"></a><!-- doxytag: member="tbb::concurrent_vector::size_type" ref="bc85684238d4bb5e422cb8ea0bdc438f" args="" -->
+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="ac7083635ab59834e9afc15e6c168df5"></a><!-- doxytag: member="tbb::concurrent_vector::allocator_type" ref="ac7083635ab59834e9afc15e6c168df5" args="" -->
+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="4543d7d45b2e461d3f8ef416974ec1f1"></a><!-- doxytag: member="tbb::concurrent_vector::value_type" ref="4543d7d45b2e461d3f8ef416974ec1f1" args="" -->
+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="e655e67dd14ed6d0cbfe7981d5fa350e"></a><!-- doxytag: member="tbb::concurrent_vector::difference_type" ref="e655e67dd14ed6d0cbfe7981d5fa350e" args="" -->
+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="8c29033785d76e240ea96ae40610275d"></a><!-- doxytag: member="tbb::concurrent_vector::reference" ref="8c29033785d76e240ea96ae40610275d" args="" -->
+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="b0b2a6241ab3fa9ab4f4074893fecd47"></a><!-- doxytag: member="tbb::concurrent_vector::const_reference" ref="b0b2a6241ab3fa9ab4f4074893fecd47" args="" -->
+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="74319c908a32d5dcdc6a080f9c2b8803"></a><!-- doxytag: member="tbb::concurrent_vector::pointer" ref="74319c908a32d5dcdc6a080f9c2b8803" args="" -->
+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="dd80729019220cdb80872ea6b905ffb1"></a><!-- doxytag: member="tbb::concurrent_vector::const_pointer" ref="dd80729019220cdb80872ea6b905ffb1" args="" -->
+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="a049674e7f386de3ea09ff2ed6d6bbbe"></a><!-- doxytag: member="tbb::concurrent_vector::iterator" ref="a049674e7f386de3ea09ff2ed6d6bbbe" args="" -->
+typedef internal::vector_iterator<<br>
+ <a class="el" href="a00141.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="b51a1baa7da67e283806c0d4f2fe9c69"></a><!-- doxytag: member="tbb::concurrent_vector::const_iterator" ref="b51a1baa7da67e283806c0d4f2fe9c69" args="" -->
+typedef internal::vector_iterator<<br>
+ <a class="el" href="a00141.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="2c7e4d252bef7af22286041c39c62abe"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="2c7e4d252bef7af22286041c39c62abe" args="" -->
+typedef std::reverse_iterator<<br>
+ iterator > </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="c59c3f9412b666a31a9052b789fb58bc"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="c59c3f9412b666a31a9052b789fb58bc" args="" -->
+typedef std::reverse_iterator<<br>
+ const_iterator > </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="0c3901b092e9e8185bdc3cae5913e625"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="0c3901b092e9e8185bdc3cae5913e625" args="" -->
+typedef std::reverse_iterator<<br>
+ iterator, 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="426145d7bd5913bc08e701c14b221046"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="426145d7bd5913bc08e701c14b221046" args="" -->
+typedef std::reverse_iterator<<br>
+ const_iterator, 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="61fd90288dba6f8808d6dafe9a249ec5"></a><!-- doxytag: member="tbb::concurrent_vector::range_type" ref="61fd90288dba6f8808d6dafe9a249ec5" args="" -->
+typedef generic_range_type<<br>
+ iterator > </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="d6ddf0312a820a98efd9a5f394cb9dbd"></a><!-- doxytag: member="tbb::concurrent_vector::const_range_type" ref="d6ddf0312a820a98efd9a5f394cb9dbd" args="" -->
+typedef generic_range_type<<br>
+ const_iterator > </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="bd3a1f2580e18cad8453a429a52d04b2"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="bd3a1f2580e18cad8453a429a52d04b2" args="(const ExceptionData &data)" -->
- </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="2c8ca9cabfcd30ad5943324c853664b5"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2c8ca9cabfcd30ad5943324c853664b5" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#2c8ca9cabfcd30ad5943324c853664b5">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="dd8a200b99a8088435a37934b58fe335"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="dd8a200b99a8088435a37934b58fe335" args="(const concurrent_vector &vector, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00141.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="64432f13f7b29bfe4acfb5568f34f3a8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="64432f13f7b29bfe4acfb5568f34f3a8" args="(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())" -->
+template<class M> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00141.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00141.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="2a2e261dfe1cab3f73f7b1a94137cfca"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2a2e261dfe1cab3f73f7b1a94137cfca" args="(size_type n)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#2a2e261dfe1cab3f73f7b1a94137cfca">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="3883a8a908b44e249a57f454de3f55d8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="3883a8a908b44e249a57f454de3f55d8" args="(size_type n, const_reference t, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#3883a8a908b44e249a57f454de3f55d8">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="4450de83c5862ea4bcd9443fd7e67419"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="4450de83c5862ea4bcd9443fd7e67419" args="(I first, I last, const allocator_type &a=allocator_type())" -->
+template<class I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00141.html#4450de83c5862ea4bcd9443fd7e67419">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="691f0f3cda3e489c37a657016e375eaf"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="691f0f3cda3e489c37a657016e375eaf" args="(const concurrent_vector &vector)" -->
+<a class="el" href="a00141.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00141.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="19f4ab88a01b0fd056af3bba463e7bd6"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="19f4ab88a01b0fd056af3bba463e7bd6" args="(const concurrent_vector< T, M > &vector)" -->
+template<class M> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00141.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00141.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00141.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="a00141.html#30484e3959892fd5392fa93c873c31f0">grow_by</a> (size_type delta)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements.  <a href="#30484e3959892fd5392fa93c873c31f0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a> (size_type delta)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#38274ab3f772ecba600c7daca7690102">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="#38274ab3f772ecba600c7daca7690102"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#473a59a4c9308b93411b898b3110d26c">grow_by</a> (size_type delta, const_reference t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Append minimal sequence of elements such that <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>>=n.  <a href="#47fe588214dd5fa06ab6e8ab78d83874"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a> (size_type n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a> (const_reference item) iterator push_back(const _reference item)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Push item.  <a href="#e94e038f915c0268fdf2d3d7f87d81b8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index.  <a href="#4c52f2950bb1832886bd4458eb09d7eb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6fade5c732cc95274d1d8277ea619d1"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="c6fade5c732cc95274d1d8277ea619d1" args="(size_type index) const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#c6fade5c732cc95274d1d8277ea619d1">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="0c073ca43e787c7cbf7b0e26d2221748"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="0c073ca43e787c7cbf7b0e26d2221748" args="(size_type index)" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#0c073ca43e787c7cbf7b0e26d2221748">at</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. Throws exceptions on errors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23e14a38af748edff96a7adc3a0f1c58"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="23e14a38af748edff96a7adc3a0f1c58" args="(size_type index) const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#23e14a38af748edff96a7adc3a0f1c58">at</a> (size_type index) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. Throws exceptions on errors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4c6ffff3bf08b92939aa2fc516edfba"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="a4c6ffff3bf08b92939aa2fc516edfba" args="(size_t grainsize=1)" -->
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a4c6ffff3bf08b92939aa2fc516edfba">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="3d09ccfb581b879ae64203741035e193"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="3d09ccfb581b879ae64203741035e193" args="(size_t grainsize=1) const " -->
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#3d09ccfb581b879ae64203741035e193">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="715fe313c4a9c22731cc404dd80c9ec9"></a><!-- doxytag: member="tbb::concurrent_vector::size" ref="715fe313c4a9c22731cc404dd80c9ec9" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. It may include elements under construction. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6426cb93cf20d3af40f3c90f1f0481a"></a><!-- doxytag: member="tbb::concurrent_vector::empty" ref="c6426cb93cf20d3af40f3c90f1f0481a" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return true if vector is not empty or has elements under construction at least. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ed6b9ae7217af5103d974045b6f5cd5"></a><!-- doxytag: member="tbb::concurrent_vector::capacity" ref="3ed6b9ae7217af5103d974045b6f5cd5" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#5a0ce05026994b010018f72cfdeb72c1">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="#5a0ce05026994b010018f72cfdeb72c1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8dfb0cb0eef96d440b4dcf801807a718"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="8dfb0cb0eef96d440b4dcf801807a718" args="(size_type n)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector. Not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98ce6b2c6d2622f0c030b46dfac3880c"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="98ce6b2c6d2622f0c030b46dfac3880c" args="(size_type n, const_reference t)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a> (size_type n, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Resize the vector, copy t for new elements. Not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1693d1da41b1a8235871be9c6633be35"></a><!-- doxytag: member="tbb::concurrent_vector::compact" ref="1693d1da41b1a8235871be9c6633be35" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit()</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03c6f4cf66532bf4cc907ee738a9a186"></a><!-- doxytag: member="tbb::concurrent_vector::shrink_to_fit" ref="03c6f4cf66532bf4cc907ee738a9a186" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48f97fbf1e5d66c5977891f4375ee4d9"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="48f97fbf1e5d66c5977891f4375ee4d9" args="(const movable_exception &src)" -->
- </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00141.html">movable_exception</a> &src)  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c248a017f0576df3e7cd99627836fd6"></a><!-- doxytag: member="tbb::concurrent_vector::max_size" ref="2c248a017f0576df3e7cd99627836fd6" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">max_size</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &src)" -->
-const <a class="el" href="a00141.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00141.html">movable_exception</a> &src)</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="730b23a251ecb6d37f692fb22f38e029"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="730b23a251ecb6d37f692fb22f38e029" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47114cbc20c8e13cac3108749a3e085d"></a><!-- doxytag: member="tbb::movable_exception::data" ref="47114cbc20c8e13cac3108749a3e085d" args="()" -->
-ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</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="c0b51160e5a764982ec97a455f94f2c6"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="c0b51160e5a764982ec97a455f94f2c6" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">end</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7d93c000d862d2558efd9a34817adbce"></a><!-- doxytag: member="tbb::movable_exception::data" ref="7d93c000d862d2558efd9a34817adbce" args="() const " -->
-const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</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="78a06182276ff758788d4c0623ae0d71"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="78a06182276ff758788d4c0623ae0d71" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#78a06182276ff758788d4c0623ae0d71">begin</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc5f5c4739b17ac5211ac58226c2f5a5"></a><!-- doxytag: member="tbb::movable_exception::name" ref="bc5f5c4739b17ac5211ac58226c2f5a5" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</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="1e6aa764ce5a1cbd24526f68bc0a2f6b"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="1e6aa764ce5a1cbd24526f68bc0a2f6b" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a> () const </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="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</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="f88fcf1c920693c39bd9709db33c199f"></a><!-- doxytag: member="tbb::concurrent_vector::cbegin" ref="f88fcf1c920693c39bd9709db33c199f" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00141.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> ()  throw ()</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="0c15a5d0f1cf75d687dabba07da1d46b"></a><!-- doxytag: member="tbb::concurrent_vector::cend" ref="0c15a5d0f1cf75d687dabba07da1d46b" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#1aea0ad179d6f0481fe7f3495f66adf9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</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="5e220926d09236d98f04fe0721e5f9a1"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="5e220926d09236d98f04fe0721e5f9a1" args="()" -->
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move()</a> method.  <a href="#7a46873119d9f85a7b0009c13e41a258"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</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="290119a4eb43cd6a9e98fa17016ba3c2"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="290119a4eb43cd6a9e98fa17016ba3c2" args="()" -->
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#17cffba35811c92b7e65d63506b69602"></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="a8c0ae2089ae784b28907cf748b89416"></a><!-- doxytag: member="tbb::movable_exception::my_exception_data" ref="a8c0ae2089ae784b28907cf748b89416" args="" -->
-ExceptionData </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</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="9f9c103e18d5f212703805354074ad44"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="9f9c103e18d5f212703805354074ad44" args="() const " -->
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#9f9c103e18d5f212703805354074ad44">rbegin</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">User data. <br></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="d438b9b32ea3a8ffb703015b6dce055b"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="d438b9b32ea3a8ffb703015b6dce055b" args="() const " -->
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#d438b9b32ea3a8ffb703015b6dce055b">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="db78a1d28c9c966050e8a2926d834a33"></a><!-- doxytag: member="tbb::concurrent_vector::crbegin" ref="db78a1d28c9c966050e8a2926d834a33" args="() const " -->
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#db78a1d28c9c966050e8a2926d834a33">crbegin</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="fff9cece89438587997ebedf93c5e962"></a><!-- doxytag: member="tbb::concurrent_vector::crend" ref="fff9cece89438587997ebedf93c5e962" args="() const " -->
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#fff9cece89438587997ebedf93c5e962">crend</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="15181759c0bfa2ddce5d10c7550e0002"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="15181759c0bfa2ddce5d10c7550e0002" args="()" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#15181759c0bfa2ddce5d10c7550e0002">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="502615a858eb9fa0390ee59169065e90"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="502615a858eb9fa0390ee59169065e90" args="() const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#502615a858eb9fa0390ee59169065e90">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="41ce48d6015a1a2812d41cf620ec3476"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="41ce48d6015a1a2812d41cf620ec3476" args="()" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#41ce48d6015a1a2812d41cf620ec3476">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="bd518e204107d07fd08d0ec5bdfd383d"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="bd518e204107d07fd08d0ec5bdfd383d" args="() const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#bd518e204107d07fd08d0ec5bdfd383d">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="2fdba8e90de6a4d2300222236d46758e"></a><!-- doxytag: member="tbb::concurrent_vector::get_allocator" ref="2fdba8e90de6a4d2300222236d46758e" args="() const " -->
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#2fdba8e90de6a4d2300222236d46758e">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="423e5aa15e0e3309ad86d026fd85f6f6"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="423e5aa15e0e3309ad86d026fd85f6f6" args="(size_type n, const_reference t)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#423e5aa15e0e3309ad86d026fd85f6f6">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="93a06b3112cb804f42f40efb5e7387b4"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="93a06b3112cb804f42f40efb5e7387b4" args="(I first, I last)" -->
+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="a00141.html#93a06b3112cb804f42f40efb5e7387b4">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="96c9c4bd968ed3edb8dd276854d2dae0"></a><!-- doxytag: member="tbb::concurrent_vector::swap" ref="96c9c4bd968ed3edb8dd276854d2dae0" args="(concurrent_vector &vector)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00141.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="a00141.html#26f937a359a66b6aae904c3cd9a3c444">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear container while keeping memory allocated.  <a href="#26f937a359a66b6aae904c3cd9a3c444"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da2444b28bb840d38f60d0030333a5fc"></a><!-- doxytag: member="tbb::concurrent_vector::~concurrent_vector" ref="da2444b28bb840d38f60d0030333a5fc" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#da2444b28bb840d38f60d0030333a5fc">~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="bb5ae659871478f1f5c68039e1273e12"></a><!-- doxytag: member="tbb::concurrent_vector::internal_vector_base" ref="bb5ae659871478f1f5c68039e1273e12" args="() const " -->
+const internal::concurrent_vector_base_v3 & </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="30086a58bff79a91103723be20916b96"></a><!-- doxytag: member="tbb::concurrent_vector::internal::vector_iterator" ref="30086a58bff79a91103723be20916b96" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></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"><b>generic_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>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>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename ExceptionData><br>
- class tbb::movable_exception< ExceptionData ></h3>
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_vector< T, A ></h3>
 
-Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
+Concurrent vector container. 
 <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="a00172.html">tbb::tbb_exception</a> </dd></dl>
+<a class="el" href="a00141.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="a00141.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.1</b></dt><dd><ul>
+<li>Fixed guarantees of <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00141.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a> to get the end [...]
+</dd></dl>
+<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="a00141.html#38274ab3f772ecba600c7daca7690102">grow_by(size_type n, const_reference t)</a> growth using copying const [...]
+</dd></dl>
 
 <p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="7a46873119d9f85a7b0009c13e41a258"></a><!-- doxytag: member="tbb::movable_exception::destroy" ref="7a46873119d9f85a7b0009c13e41a258" args="()" -->
+<a class="anchor" name="26f937a359a66b6aae904c3cd9a3c444"></a><!-- doxytag: member="tbb::concurrent_vector::clear" ref="26f937a359a66b6aae904c3cd9a3c444" args="()" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, class A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00141.html">tbb::movable_exception</a>< ExceptionData >::destroy           </td>
+          <td class="memname">void <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::clear           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Destroys objects created by the <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move()</a> method. 
+Clear container while keeping memory allocated. 
 <p>
-Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. 
+To free up the memory, use in conjunction with method <a class="el" href="a00141.html#1693d1da41b1a8235871be9c6633be35">compact()</a>. Not thread safe 
+</div>
+</div><p>
+<a class="anchor" name="473a59a4c9308b93411b898b3110d26c"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="473a59a4c9308b93411b898b3110d26c" args="(size_type delta, const_reference t)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"> <em>t</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-Implements <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+Returns iterator pointing to the first new element. 
 </div>
 </div><p>
-<a class="anchor" name="1aea0ad179d6f0481fe7f3495f66adf9"></a><!-- doxytag: member="tbb::movable_exception::move" ref="1aea0ad179d6f0481fe7f3495f66adf9" args="()" -->
+<a class="anchor" name="38274ab3f772ecba600c7daca7690102"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="38274ab3f772ecba600c7daca7690102" args="(size_type delta, const_reference t)" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, class A> </div>
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00141.html">movable_exception</a>* <a class="el" href="a00141.html">tbb::movable_exception</a>< ExceptionData >::move           </td>
+          <td class="memname">size_type <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"> <em>t</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Grow by "delta" elements using copying constuctor. 
+<p>
+Returns old size. 
+</div>
+</div><p>
+<a class="anchor" name="c8177b1865270ea68aa1ab9148e5e35e"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="c8177b1865270ea68aa1ab9148e5e35e" args="(size_type delta)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>delta</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns iterator pointing to the first new element. 
+</div>
+</div><p>
+<a class="anchor" name="30484e3959892fd5392fa93c873c31f0"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="30484e3959892fd5392fa93c873c31f0" args="(size_type delta)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">size_type <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>delta</em>          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Creates and returns pointer to the deep copy of this exception object. 
+Grow by "delta" elements. 
 <p>
-Move semantics is allowed. 
+Returns old size. 
+</div>
+</div><p>
+<a class="anchor" name="a7e3b67c8ccab16d0aecc80899ae799d"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="a7e3b67c8ccab16d0aecc80899ae799d" args="(size_type n)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-Implements <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. 
 </div>
 </div><p>
-<a class="anchor" name="17cffba35811c92b7e65d63506b69602"></a><!-- doxytag: member="tbb::movable_exception::throw_self" ref="17cffba35811c92b7e65d63506b69602" args="()" -->
+<a class="anchor" name="47fe588214dd5fa06ab6e8ab78d83874"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="47fe588214dd5fa06ab6e8ab78d83874" args="(size_type n)" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, class A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00141.html">tbb::movable_exception</a>< ExceptionData >::throw_self           </td>
+          <td class="memname">void <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::grow_to_at_least           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Append minimal sequence of elements such that <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>>=n. 
+<p>
+The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. 
+</div>
+</div><p>
+<a class="anchor" name="4c52f2950bb1832886bd4458eb09d7eb"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="4c52f2950bb1832886bd4458eb09d7eb" args="(size_type index)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">reference <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::operator[]           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>index</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="e94e038f915c0268fdf2d3d7f87d81b8"></a><!-- doxytag: member="tbb::concurrent_vector::push_back" ref="e94e038f915c0268fdf2d3d7f87d81b8" args="(const_reference item) iterator push_back(const _reference item)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">size_type <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::push_back           </td>
+          <td>(</td>
+          <td class="paramtype">const_reference </td>
+          <td class="paramname"> <em>item</em>          </td>
           <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
+          <td width="100%"> const<code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Throws this exception object. 
+Push item. 
+<p>
+Returns iterator pointing to the new element. 
+</div>
+</div><p>
+<a class="anchor" name="5a0ce05026994b010018f72cfdeb72c1"></a><!-- doxytag: member="tbb::concurrent_vector::reserve" ref="5a0ce05026994b010018f72cfdeb72c1" args="(size_type n)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, class A> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00141.html">tbb::concurrent_vector</a>< T, A >::reserve           </td>
+          <td>(</td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <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. 
+Allocate enough space to grow to size n without having to allocate more memory later. 
 <p>
-Implements <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+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. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00293.html">concurrent_vector.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00142.html b/doc/html/a00142.html
index 862ff32..ee63611 100644
--- a/doc/html/a00142.html
+++ b/doc/html/a00142.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::empty_task Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,81 +21,28 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00142.html">mutex</a></div>
-<h1>tbb::mutex Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00142.html">empty_task</a></div>
+<h1>tbb::empty_task Class Reference<br>
 <small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::mutex" -->Wrapper around the platform's native reader-writer lock.  
+[<a class="el" href="a00246.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::empty_task" --><!-- doxytag: inherits="tbb::task" -->task that does nothing. Useful for synchronization.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00300.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00367.html">task.h</a>></code>
 <p>
-<a href="a00029.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::empty_task:
+<p><center><img src="a00142.png" usemap="#tbb::empty_task_map" border="0" alt=""></center>
+<map name="tbb::empty_task_map">
+<area href="a00174.html" alt="tbb::task" shape="rect" coords="0,0,97,24">
+</map>
+<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 Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05313cb77d4f85213103d4dab74ed454"></a><!-- doxytag: member="tbb::mutex::mutex" ref="05313cb77d4f85213103d4dab74ed454" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">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="4470e61c24c129a0299ca6c17240adbb"></a><!-- doxytag: member="tbb::mutex::lock" ref="4470e61c24c129a0299ca6c17240adbb" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#4331652c79dea1c1131bd59ab161b234"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc9ef443ae75d966695546be399cc6b"></a><!-- doxytag: member="tbb::mutex::unlock" ref="5fc9ef443ae75d966695546be399cc6b" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="17b78176054e2bac1ff35b9535d1ea0c"></a><!-- doxytag: member="tbb::mutex::is_rw_mutex" ref="17b78176054e2bac1ff35b9535d1ea0c" args="" -->
-static 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="d4558e5a7c5b8d8e158ec7a1079669bd"></a><!-- doxytag: member="tbb::mutex::is_recursive_mutex" ref="d4558e5a7c5b8d8e158ec7a1079669bd" args="" -->
-static 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="f023a29c61451d02359095cbff0f3d45"></a><!-- doxytag: member="tbb::mutex::is_fair_mutex" ref="f023a29c61451d02359095cbff0f3d45" args="" -->
-static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="a00143.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00143.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Wrapper around the platform's native reader-writer lock. 
+task that does nothing. Useful for synchronization. 
 <p>
-For testing purposes only. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::mutex::try_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Try acquiring lock (non-blocking). 
-<p>
-Return true if lock acquired; false otherwise. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00300.html">mutex.h</a></ul>
+<li><a class="el" href="a00367.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00142.png b/doc/html/a00142.png
new file mode 100644
index 0000000..2fa6419
Binary files /dev/null and b/doc/html/a00142.png differ
diff --git a/doc/html/a00143.html b/doc/html/a00143.html
index e228d4e..8c242fe 100644
--- a/doc/html/a00143.html
+++ b/doc/html/a00143.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,73 +21,162 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00142.html">mutex</a>::<a class="el" href="a00143.html">scoped_lock</a></div>
-<h1>tbb::mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::mutex::scoped_lock" -->The scoped locking pattern.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00143.html">enumerable_thread_specific</a></div>
+<h1>tbb::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</h1><!-- doxytag: class="tbb::enumerable_thread_specific" -->The thread local class template.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00300.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00305.html">enumerable_thread_specific.h</a>></code>
 <p>
-<a href="a00030.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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="60047d25605a1ef993c49234e9ac5c2d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::allocator_type" ref="60047d25605a1ef993c49234e9ac5c2d" args="" -->
+typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Basic types. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14b5967a627853440608619a07c9281a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::value_type" ref="14b5967a627853440608619a07c9281a" args="" -->
+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="06ff8c90338e3f76201e56ac2e8bd566"></a><!-- doxytag: member="tbb::enumerable_thread_specific::reference" ref="06ff8c90338e3f76201e56ac2e8bd566" args="" -->
+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="cc538a9b0919cba06e9807984a840710"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_reference" ref="cc538a9b0919cba06e9807984a840710" args="" -->
+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="de58e04a639ecadf5e021b27c430cd32"></a><!-- doxytag: member="tbb::enumerable_thread_specific::pointer" ref="de58e04a639ecadf5e021b27c430cd32" args="" -->
+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="3ee05b7e9b137913fc2f946d7edb6325"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_pointer" ref="3ee05b7e9b137913fc2f946d7edb6325" args="" -->
+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="f7104b09f6dc1f8035ea978f56f9a090"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size_type" ref="f7104b09f6dc1f8035ea978f56f9a090" args="" -->
+typedef internal_collection_type::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="631ed3389c35ba4b90b7d1be0e291d86"></a><!-- doxytag: member="tbb::enumerable_thread_specific::difference_type" ref="631ed3389c35ba4b90b7d1be0e291d86" args="" -->
+typedef internal_collection_type::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="006bd5182f81d6d01cbb558c0b500a29"></a><!-- doxytag: member="tbb::enumerable_thread_specific::iterator" ref="006bd5182f81d6d01cbb558c0b500a29" args="" -->
+typedef internal::enumerable_thread_specific_iterator<<br>
+ <a class="el" href="a00141.html">internal_collection_type</a>,<br>
+ 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="a59d5bae106a5e631fe164be9a261b72"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_iterator" ref="a59d5bae106a5e631fe164be9a261b72" args="" -->
+typedef internal::enumerable_thread_specific_iterator<<br>
+ <a class="el" href="a00141.html">internal_collection_type</a>,<br>
+ const 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="8d695d7c22817587116f27089cd190d8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range_type" ref="8d695d7c22817587116f27089cd190d8" args="" -->
+typedef generic_range_type<<br>
+ iterator > </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="73dc6b3dd06c14942c641a5ae924e355"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_range_type" ref="73dc6b3dd06c14942c641a5ae924e355" args="" -->
+typedef generic_range_type<<br>
+ const_iterator > </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="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="632e351d5269ac609b08dba19282f3a3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="632e351d5269ac609b08dba19282f3a3" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor, which leads to default construction of local copies. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="e5698930b84c098bb6d87175b8b50306"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="e5698930b84c098bb6d87175b8b50306" args="(Finit _finit)" -->
+template<typename Finit> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00143.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a> (Finit _finit)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">construction with initializer method <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0466c43272d8458185e980fc2dc4abe2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="0466c43272d8458185e980fc2dc4abe2" args="(const T &_exemplar)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a> (const T &_exemplar)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constuction with exemplar, which leads to copy construction of local copies. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41176526161d6fef1bdd19c2db7ded4d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::~enumerable_thread_specific" ref="41176526161d6fef1bdd19c2db7ded4d" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</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="ceb691814a0001241c43595d309cf615"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="ceb691814a0001241c43595d309cf615" args="()" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#ceb691814a0001241c43595d309cf615">local</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="a00143.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00142.html">mutex</a> &<a class="el" href="a00142.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">returns reference to local, discarding exists <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9505351eace34ed7130257adcae91706"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="9505351eace34ed7130257adcae91706" args="(bool &exists)" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#9505351eace34ed7130257adcae91706">local</a> (bool &exists)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#605a6b9af0f8cdabdf81825e0de99600"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="302a4d6f55f852d5b7a6679e0e00316e"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size" ref="302a4d6f55f852d5b7a6679e0e00316e" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">size</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="862e022841cdc522e4296a5533b22efd"></a><!-- doxytag: member="tbb::mutex::scoped_lock::acquire" ref="862e022841cdc522e4296a5533b22efd" args="(mutex &mutex)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00142.html">mutex</a> &<a class="el" href="a00142.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of local copies. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad23345a722622199deaa4dfd243d9f8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::empty" ref="ad23345a722622199deaa4dfd243d9f8" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#ad23345a722622199deaa4dfd243d9f8">empty</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="591e0c49b82bcedffcbe0923f1b915ec"></a><!-- doxytag: member="tbb::mutex::scoped_lock::try_acquire" ref="591e0c49b82bcedffcbe0923f1b915ec" args="(mutex &mutex)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00142.html">mutex</a> &<a class="el" href="a00142.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">true if there have been no local copies created <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="225f945c810397c6a54d5b8317dc5843"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="225f945c810397c6a54d5b8317dc5843" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a> ()</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="0d51d18cd99df3b2e93bf07378d0992c"></a><!-- doxytag: member="tbb::mutex::scoped_lock::release" ref="0d51d18cd99df3b2e93bf07378d0992c" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">begin iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="44c0b67ebb56b2ae1fa260d9e2bd1e99"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="44c0b67ebb56b2ae1fa260d9e2bd1e99" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">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="ba6674c6102a6faf8f96d131497654b3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="ba6674c6102a6faf8f96d131497654b3" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#ba6674c6102a6faf8f96d131497654b3">begin</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">begin const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89811890e6a77f1e0cfc6c24ed35d09b"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="89811890e6a77f1e0cfc6c24ed35d09b" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#89811890e6a77f1e0cfc6c24ed35d09b">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="56f6124f5870e26433a5bb2b71e4b7e9"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="56f6124f5870e26433a5bb2b71e4b7e9" args="(size_t grainsize=1)" -->
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a> (size_t grainsize=1)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get range for parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32dd1d88e42dc1faccceca244b12b6c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="a32dd1d88e42dc1faccceca244b12b6c" args="(size_t grainsize=1) const " -->
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#a32dd1d88e42dc1faccceca244b12b6c">range</a> (size_t grainsize=1) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const range for parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c890601a45273ef759e64ac2fe75cb6a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::clear" ref="c890601a45273ef759e64ac2fe75cb6a" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys local copies. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f109a2bbe9ce390f78363a2d17a88ed5"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="f109a2bbe9ce390f78363a2d17a88ed5" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" -->
+template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00143.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3be03082943460305b8022693c04b4a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="c3be03082943460305b8022693c04b4a" args="(const enumerable_thread_specific &other)" -->
+ </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00143.html">enumerable_thread_specific</a> &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8226b10dbb71cfe467eb85ac37b91ff0"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="8226b10dbb71cfe467eb85ac37b91ff0" args="(const enumerable_thread_specific &other)" -->
+<a class="el" href="a00143.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00143.html">enumerable_thread_specific</a> &other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b124465416967c23b12841170a7f0263"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="b124465416967c23b12841170a7f0263" args="(const enumerable_thread_specific< U, Alloc, Cachetype > &other)" -->
+template<typename U, typename Alloc, ets_key_usage_type Cachetype> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00143.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00143.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="dd6b27d9c98297220b08732d9087a5a8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine" ref="dd6b27d9c98297220b08732d9087a5a8" args="(combine_func_t f_combine)" -->
+template<typename combine_func_t> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4abce9638ef2693d813d820af59bb6e2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine_each" ref="4abce9638ef2693d813d820af59bb6e2" args="(combine_func_t f_combine)" -->
+template<typename combine_func_t> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="93062a14ad2e50e2b7b485b913170779"></a><!-- doxytag: member="tbb::mutex::scoped_lock::mutex" ref="93062a14ad2e50e2b7b485b913170779" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45364b2f249ceb935cff05c29fcfcf5c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="45364b2f249ceb935cff05c29fcfcf5c" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b></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"><b>generic_range_type</b></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A generic range, used to create range objects from the iterators. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>padded_element</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The padded elements; padded to avoid false sharing. <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="605a6b9af0f8cdabdf81825e0de99600"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="605a6b9af0f8cdabdf81825e0de99600" args="(mutex &mutex)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00142.html">mutex</a> & </td>
-          <td class="paramname"> <em>mutex</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename T, typename Allocator = cache_aligned_allocator<T>, ets_key_usage_type ETS_key_type = ets_no_key><br>
+ class tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
 
+The thread local class template. 
 <p>
-Acquire lock on given mutex. 
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00300.html">mutex.h</a></ul>
+<li><a class="el" href="a00305.html">enumerable_thread_specific.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00144.html b/doc/html/a00144.html
index d130f1b..202af17 100644
--- a/doc/html/a00144.html
+++ b/doc/html/a00144.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_mutex Class Reference</title>
+<title>tbb::filter Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,184 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00144.html">null_mutex</a></div>
-<h1>tbb::null_mutex Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00144.html">filter</a></div>
+<h1>tbb::filter Class Reference<br>
 <small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::null_mutex" -->A mutex which does nothing.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::filter" -->A stage in a pipeline.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00302.html">null_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00360.html">pipeline.h</a>></code>
 <p>
-<a href="a00031.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::filter:
+<p><center><img src="a00144.png" usemap="#tbb::filter_map" border="0" alt=""></center>
+<map name="tbb::filter_map">
+<area href="a00182.html" alt="tbb::thread_bound_filter" shape="rect" coords="0,56,145,80">
+</map>
+<a href="a00045.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 Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a960bed8b19a4d111ca047de206f5f77"></a><!-- doxytag: member="tbb::null_mutex::is_rw_mutex" ref="a960bed8b19a4d111ca047de206f5f77" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0fefed74b341d43ccf0e2fc30d31b75"></a><!-- doxytag: member="tbb::null_mutex::is_recursive_mutex" ref="a0fefed74b341d43ccf0e2fc30d31b75" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">processes multiple items in parallel and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="707cf399055d68177b1d64c2e112603a"></a><!-- doxytag: member="tbb::null_mutex::is_fair_mutex" ref="707cf399055d68177b1d64c2e112603a" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">processes items one at a time; all such filters process items in the same order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order</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="a00145.html">scoped_lock</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">processes items one at a time and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> { <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> =  current_version | filter_is_out_of_order, 
+<a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> =  current_version | filter_is_serial, 
+<a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> =  current_version | filter_is_serial | filter_is_out_of_order, 
+<a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">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="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#fcfec27656a69ff2072802ac001e936f">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="cd53206c4795ef2df5df26b795caf692"></a><!-- doxytag: member="tbb::filter::is_ordered" ref="cd53206c4795ef2df5df26b795caf692" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#cd53206c4795ef2df5df26b795caf692">is_ordered</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"><a class="anchor" name="15c29cae5d237e6d63dbfe5c94af89d5"></a><!-- doxytag: member="tbb::filter::is_bound" ref="15c29cae5d237e6d63dbfe5c94af89d5" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if filter is thread-bound. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">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="#fa1b3dc1f4f47563ccab7f4d92f5b543"></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="a00144.html#66d159f362293e3964ba3da8bc1d2604">~filter</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy filter.  <a href="#66d159f362293e3964ba3da8bc1d2604"></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="a00144.html#56275eb889c77c4807967133e21401bd">finalize</a> (void *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys item if pipeline was cancelled.  <a href="#56275eb889c77c4807967133e21401bd"></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="f1111979b4afbde1a6c1873577a005ae"></a><!-- doxytag: member="tbb::filter::filter" ref="f1111979b4afbde1a6c1873577a005ae" args="(bool is_serial_)" -->
+ </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="a3f49df3c34a3e5a8884001c30230a94"></a><!-- doxytag: member="tbb::filter::filter" ref="a3f49df3c34a3e5a8884001c30230a94" args="(mode filter_mode)" -->
+ </td><td class="memItemRight" valign="bottom"><b>filter</b> (<a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">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="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::filter::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
+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="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::filter::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b211ee58bada099e24280d478017cbff"></a><!-- doxytag: member="tbb::filter::pipeline" ref="b211ee58bada099e24280d478017cbff" args="" -->
+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="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::filter::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00145.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A mutex which does nothing. 
+A stage in a pipeline. 
+<p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf"></a><!-- doxytag: member="tbb::filter::mode" ref="d3b6ed2c517144199d0c39c62ddfd8cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter::mode</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><!-- doxytag: member="parallel" ref="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><!-- doxytag: member="serial_in_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><!-- doxytag: member="serial_out_of_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9" args="" -->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="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237"></a><!-- doxytag: member="serial" ref="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237" args="" -->serial</em> </td><td>
+<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>use serial_in_order instead </dd></dl>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="66d159f362293e3964ba3da8bc1d2604"></a><!-- doxytag: member="tbb::filter::~filter" ref="66d159f362293e3964ba3da8bc1d2604" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::filter::~filter           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroy filter. 
+<p>
+If the filter was added to a pipeline, the pipeline must be destroyed first. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="56275eb889c77c4807967133e21401bd"></a><!-- doxytag: member="tbb::filter::finalize" ref="56275eb889c77c4807967133e21401bd" args="(void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::filter::finalize           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys item if pipeline was cancelled. 
+<p>
+Required to prevent memory leaks. Note it can be called concurrently even for serial filters. 
+</div>
+</div><p>
+<a class="anchor" name="fa1b3dc1f4f47563ccab7f4d92f5b543"></a><!-- doxytag: member="tbb::filter::operator()" ref="fa1b3dc1f4f47563ccab7f4d92f5b543" args="(void *item)=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void* tbb::filter::operator()           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-A <a class="el" href="a00144.html">null_mutex</a> does no operation and simulates success. 
+Operate on an item from the input stream, and return item for output stream. 
 <p>
+Returns NULL if filter is a sink. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00302.html">null_mutex.h</a></ul>
+<li><a class="el" href="a00360.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00144.png b/doc/html/a00144.png
new file mode 100644
index 0000000..e668b17
Binary files /dev/null and b/doc/html/a00144.png differ
diff --git a/doc/html/a00145.html b/doc/html/a00145.html
index 1a090a5..b689045 100644
--- a/doc/html/a00145.html
+++ b/doc/html/a00145.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_mutex::scoped_lock Class Reference</title>
+<title>tbb::final_scan_tag Struct Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,33 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00144.html">null_mutex</a>::<a class="el" href="a00145.html">scoped_lock</a></div>
-<h1>tbb::null_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00145.html">final_scan_tag</a></div>
+<h1>tbb::final_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::final_scan_tag" -->Used to indicate that the final scan is being performed.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00302.html">null_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00342.html">parallel_scan.h</a>></code>
 <p>
-<a href="a00032.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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 Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="765e64065919fdd9665e78b5ec4d3c6f"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::scoped_lock" ref="765e64065919fdd9665e78b5ec4d3c6f" args="(null_mutex &)" -->
- </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00144.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6889f00ca3946906e89e856988bb890"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::acquire" ref="f6889f00ca3946906e89e856988bb890" args="(null_mutex &)" -->
-void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00144.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90eb562a9de52b33362a6fe237b3df42"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::try_acquire" ref="90eb562a9de52b33362a6fe237b3df42" args="(null_mutex &)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00144.html">null_mutex</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29fdf07b4c295850a6e433001c2c6a7"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::release" ref="b29fdf07b4c295850a6e433001c2c6a7" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>release</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="06888e4a548788fcb2c15542d428d8c9"></a><!-- doxytag: member="tbb::final_scan_tag::is_final_scan" ref="06888e4a548788fcb2c15542d428d8c9" args="()" -->
+static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex. 
+Used to indicate that the final scan is being performed. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00302.html">null_mutex.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00342.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00146.html b/doc/html/a00146.html
index 00f33a4..f9b4abf 100644
--- a/doc/html/a00146.html
+++ b/doc/html/a00146.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_rw_mutex Class Reference</title>
+<title>tbb::improper_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,24 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00146.html">null_rw_mutex</a></div>
-<h1>tbb::null_rw_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::null_rw_mutex" -->A rw mutex which does nothing.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00146.html">improper_lock</a></div>
+<h1>tbb::improper_lock Class Reference</h1><!-- doxytag: class="tbb::improper_lock" -->Exception for PPL locks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00303.html">null_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00033.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f3235cbf63812f72e5755a4c820f523"></a><!-- doxytag: member="tbb::null_rw_mutex::is_rw_mutex" ref="2f3235cbf63812f72e5755a4c820f523" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</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="74213c2d20407e1fa16b70ca55ef27c6"></a><!-- doxytag: member="tbb::improper_lock::what" ref="74213c2d20407e1fa16b70ca55ef27c6" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e33ac3b047901e69e7997a16e221a330"></a><!-- doxytag: member="tbb::null_rw_mutex::is_recursive_mutex" ref="e33ac3b047901e69e7997a16e221a330" args="" -->
-static 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="e5248faf1412f9283185a0b5d72d7456"></a><!-- doxytag: member="tbb::null_rw_mutex::is_fair_mutex" ref="e5248faf1412f9283185a0b5d72d7456" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</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="a00147.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00147.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A rw mutex which does nothing. 
-<p>
-A <a class="el" href="a00146.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
+Exception for PPL locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">null_rw_mutex.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00147.html b/doc/html/a00147.html
index a2c45f8..4d9d431 100644
--- a/doc/html/a00147.html
+++ b/doc/html/a00147.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_rw_mutex::scoped_lock Class Reference</title>
+<title>tbb::invalid_multiple_scheduling Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,24 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00146.html">null_rw_mutex</a>::<a class="el" href="a00147.html">scoped_lock</a></div>
-<h1>tbb::null_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_rw_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00147.html">invalid_multiple_scheduling</a></div>
+<h1>tbb::invalid_multiple_scheduling Class Reference</h1><!-- doxytag: class="tbb::invalid_multiple_scheduling" -->Exception for repeated scheduling of the same task_handle.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00303.html">null_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00034.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e11281a13a7b6243c6c9ab243c5ad5a8"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::scoped_lock" ref="e11281a13a7b6243c6c9ab243c5ad5a8" args="(null_rw_mutex &, bool=true)" -->
- </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &, bool=true)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72c4c302fdfc20187a650348e432b0a7"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::acquire" ref="72c4c302fdfc20187a650348e432b0a7" args="(null_rw_mutex &, bool=true)" -->
-void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &, bool=true)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa1e2a5592ee2672470ea44d98f1c498"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::upgrade_to_writer" ref="fa1e2a5592ee2672470ea44d98f1c498" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="efcb7948649e1652d59aaff9c8ea40f1"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::downgrade_to_reader" ref="efcb7948649e1652d59aaff9c8ea40f1" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>downgrade_to_reader</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="56686c4dfe4a32a1d9bd8e7e729130e6"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::try_acquire" ref="56686c4dfe4a32a1d9bd8e7e729130e6" args="(null_rw_mutex &, bool=true)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &, bool=true)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6146c803a4ad2f14263fdc019a72b5a9"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::release" ref="6146c803a4ad2f14263fdc019a72b5a9" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="57082ccac880db17144db76c0f94701e"></a><!-- doxytag: member="tbb::invalid_multiple_scheduling::what" ref="57082ccac880db17144db76c0f94701e" args="() const " -->
+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>
-Represents acquisition of a mutex. 
+Exception for repeated scheduling of the same task_handle. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">null_rw_mutex.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00148.html b/doc/html/a00148.html
index a928110..2e150b9 100644
--- a/doc/html/a00148.html
+++ b/doc/html/a00148.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::missing_wait Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,24 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00148.html">parallel_do_feeder</a></div>
-<h1>tbb::parallel_do_feeder< Item > Class Template Reference</h1><!-- doxytag: class="tbb::parallel_do_feeder" -->Class the user supplied algorithm body uses to add new tasks.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00148.html">missing_wait</a></div>
+<h1>tbb::missing_wait Class Reference</h1><!-- doxytag: class="tbb::missing_wait" -->Exception for missing wait on structured_task_group.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00304.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00035.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="40baaf0f6856f4491dd0adf896c93516"></a><!-- doxytag: member="tbb::parallel_do_feeder::add" ref="40baaf0f6856f4491dd0adf896c93516" args="(const Item &item)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</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="b381179b22f5f5e8511470c73d64b37f"></a><!-- doxytag: member="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl" ref="b381179b22f5f5e8511470c73d64b37f" args="" -->
-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="fe3f8527f9013266dc845a4ff22dd2cf"></a><!-- doxytag: member="tbb::missing_wait::what" ref="fe3f8527f9013266dc845a4ff22dd2cf" args="() const " -->
+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 Item><br>
- class tbb::parallel_do_feeder< Item ></h3>
-
-Class the user supplied algorithm body uses to add new tasks. 
-<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>
-
+Exception for missing wait on structured_task_group. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00304.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00149.html b/doc/html/a00149.html
index d5cd8c3..86a0877 100644
--- a/doc/html/a00149.html
+++ b/doc/html/a00149.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::movable_exception< ExceptionData > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,114 +21,145 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00149.html">parallel_while</a></div>
-<h1>tbb::parallel_while< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::parallel_while" -->Parallel iteration over a stream, with optional addition of more work.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00149.html">movable_exception</a></div>
+<h1>tbb::movable_exception< ExceptionData > Class Template Reference</h1><!-- doxytag: class="tbb::movable_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->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="a00338.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00038.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::movable_exception< ExceptionData >:
+<p><center><img src="a00149.png" usemap="#tbb::movable_exception< ExceptionData >_map" border="0" alt=""></center>
+<map name="tbb::movable_exception< ExceptionData >_map">
+<area href="a00180.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,248,24">
+</map>
+<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa297e53d3af2a101e712bc200233e9c"></a><!-- doxytag: member="tbb::parallel_while::value_type" ref="fa297e53d3af2a101e712bc200233e9c" args="" -->
-typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">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="36e26ba3880c7bcf804a97ba0cbe133f"></a><!-- doxytag: member="tbb::parallel_while::parallel_while" ref="36e26ba3880c7bcf804a97ba0cbe133f" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd3a1f2580e18cad8453a429a52d04b2"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="bd3a1f2580e18cad8453a429a52d04b2" args="(const ExceptionData &data)" -->
+ </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="48f97fbf1e5d66c5977891f4375ee4d9"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="48f97fbf1e5d66c5977891f4375ee4d9" args="(const movable_exception &src)" -->
+ </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00149.html">movable_exception</a> &src)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &src)" -->
+const <a class="el" href="a00149.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00149.html">movable_exception</a> &src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47114cbc20c8e13cac3108749a3e085d"></a><!-- doxytag: member="tbb::movable_exception::data" ref="47114cbc20c8e13cac3108749a3e085d" args="()" -->
+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="7d93c000d862d2558efd9a34817adbce"></a><!-- doxytag: member="tbb::movable_exception::data" ref="7d93c000d862d2558efd9a34817adbce" args="() const " -->
+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="bc5f5c4739b17ac5211ac58226c2f5a5"></a><!-- doxytag: member="tbb::movable_exception::name" ref="bc5f5c4739b17ac5211ac58226c2f5a5" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">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="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">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="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00149.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> ()  throw ()</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="6fcfc973cc56b79c6d0fbb8a31be7e84"></a><!-- doxytag: member="tbb::parallel_while::~parallel_while" ref="6fcfc973cc56b79c6d0fbb8a31be7e84" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#1aea0ad179d6f0481fe7f3495f66adf9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</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="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">move()</a> method.  <a href="#7a46873119d9f85a7b0009c13e41a258"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#17cffba35811c92b7e65d63506b69602">throw_self</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream.  <a href="#b32a0a6e5e09ebb7fad3e6652c19afe5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#17cffba35811c92b7e65d63506b69602"></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="a8c0ae2089ae784b28907cf748b89416"></a><!-- doxytag: member="tbb::movable_exception::my_exception_data" ref="a8c0ae2089ae784b28907cf748b89416" args="" -->
+ExceptionData </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running.  <a href="#e131c560057a58229992b61eb8dba4c6"></a><br></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 Body><br>
- class tbb::parallel_while< Body ></h3>
+<h3>template<typename ExceptionData><br>
+ class tbb::movable_exception< ExceptionData ></h3>
 
-Parallel iteration over a stream, with optional addition of more work. 
+Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
 <p>
-The Body b has the requirement: <br>
- "b(v)" <br>
- "b.argument_type" <br>
- where v is an argument_type 
+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="a00180.html">tbb::tbb_exception</a> </dd></dl>
+
 <p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &item)" -->
+<a class="anchor" name="7a46873119d9f85a7b0009c13e41a258"></a><!-- doxytag: member="tbb::movable_exception::destroy" ref="7a46873119d9f85a7b0009c13e41a258" args="()" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename Body> </div>
+template<typename ExceptionData> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00149.html">tbb::parallel_while</a>< Body >::add           </td>
+          <td class="memname">void <a class="el" href="a00149.html">tbb::movable_exception</a>< ExceptionData >::destroy           </td>
           <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
-          <td class="paramname"> <em>item</em>          </td>
+          <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"></td>
+          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Add a work item while running. 
+Destroys objects created by the <a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">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>
-Should be executed only by body.apply or a thread spawned therefrom. 
+Implements <a class="el" href="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
 </div>
 </div><p>
-<a class="anchor" name="b32a0a6e5e09ebb7fad3e6652c19afe5"></a><!-- doxytag: member="tbb::parallel_while::run" ref="b32a0a6e5e09ebb7fad3e6652c19afe5" args="(Stream &stream, const Body &body)" -->
+<a class="anchor" name="1aea0ad179d6f0481fe7f3495f66adf9"></a><!-- doxytag: member="tbb::movable_exception::move" ref="1aea0ad179d6f0481fe7f3495f66adf9" args="()" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename Body> </div>
-<div class="memtemplate">
-template<typename Stream> </div>
+template<typename ExceptionData> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00149.html">tbb::parallel_while</a>< Body >::run           </td>
+          <td class="memname"><a class="el" href="a00149.html">movable_exception</a>* <a class="el" href="a00149.html">tbb::movable_exception</a>< ExceptionData >::move           </td>
           <td>(</td>
-          <td class="paramtype">Stream & </td>
-          <td class="paramname"> <em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"> <em>body</em></td><td> </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
         </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="17cffba35811c92b7e65d63506b69602"></a><!-- doxytag: member="tbb::movable_exception::throw_self" ref="17cffba35811c92b7e65d63506b69602" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename ExceptionData> </div>
+      <table class="memname">
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="memname">void <a class="el" href="a00149.html">tbb::movable_exception</a>< ExceptionData >::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Apply body.apply to each item in the stream. 
+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>
-A Stream s has the requirements <br>
- "S::value_type" <br>
- "s.pop_if_present(value) is convertible to bool 
+Implements <a class="el" href="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00338.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00149.png b/doc/html/a00149.png
new file mode 100644
index 0000000..a85d170
Binary files /dev/null and b/doc/html/a00149.png differ
diff --git a/doc/html/a00150.html b/doc/html/a00150.html
index 3f3fa93..a1ff08a 100644
--- a/doc/html/a00150.html
+++ b/doc/html/a00150.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,82 +21,81 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00150.html">pipeline</a></div>
-<h1>tbb::pipeline Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00150.html">mutex</a></div>
+<h1>tbb::mutex Class Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeling that applies filters to items.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::mutex" -->Wrapper around the platform's native reader-writer lock.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00347.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00313.html">mutex.h</a>></code>
 <p>
-<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
-__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05313cb77d4f85213103d4dab74ed454"></a><!-- doxytag: member="tbb::mutex::mutex" ref="05313cb77d4f85213103d4dab74ed454" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#05313cb77d4f85213103d4dab74ed454">mutex</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="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</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="4470e61c24c129a0299ca6c17240adbb"></a><!-- doxytag: member="tbb::mutex::lock" ref="4470e61c24c129a0299ca6c17240adbb" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">lock</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="38fb5c9c8395dd6f89a4ae2011a83e0d"></a><!-- doxytag: member="tbb::pipeline::add_filter" ref="38fb5c9c8395dd6f89a4ae2011a83e0d" args="(filter &filter_)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00139.html">filter</a> &filter_)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</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="f627616049b3fe36801f37ee40403ef8"></a><!-- doxytag: member="tbb::pipeline::run" ref="f627616049b3fe36801f37ee40403ef8" args="(size_t max_number_of_live_tokens)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a> (size_t max_number_of_live_tokens)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#4331652c79dea1c1131bd59ab161b234"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc9ef443ae75d966695546be399cc6b"></a><!-- doxytag: member="tbb::mutex::unlock" ref="5fc9ef443ae75d966695546be399cc6b" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">unlock</a> ()</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="93d7fec8cd607b803dd2d79fb46bd260"></a><!-- doxytag: member="tbb::pipeline::run" ref="93d7fec8cd607b803dd2d79fb46bd260" args="(size_t max_number_of_live_tokens, tbb::task_group_context &context)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="17b78176054e2bac1ff35b9535d1ea0c"></a><!-- doxytag: member="tbb::mutex::is_rw_mutex" ref="17b78176054e2bac1ff35b9535d1ea0c" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</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="2c84aef5b834b555ee220b176e25931e"></a><!-- doxytag: member="tbb::pipeline::clear" ref="2c84aef5b834b555ee220b176e25931e" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d4558e5a7c5b8d8e158ec7a1079669bd"></a><!-- doxytag: member="tbb::mutex::is_recursive_mutex" ref="d4558e5a7c5b8d8e158ec7a1079669bd" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</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="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::pipeline::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
-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="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c991e50853b0cac7da039550344d3ef"></a><!-- doxytag: member="tbb::pipeline::filter" ref="4c991e50853b0cac7da039550344d3ef" args="" -->
-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="f023a29c61451d02359095cbff0f3d45"></a><!-- doxytag: member="tbb::mutex::is_fair_mutex" ref="f023a29c61451d02359095cbff0f3d45" args="" -->
+static 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="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::pipeline::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+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="9d033d41ff53a0ae6ef824aceee7ecbc"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_cleaner" ref="9d033d41ff53a0ae6ef824aceee7ecbc" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_cleaner</b></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="a00151.html">scoped_lock</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00151.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A processing pipeling that applies filters to items. 
+Wrapper around the platform's native reader-writer lock. 
+<p>
+For testing purposes only. 
 <p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="49513c6c24f9d5bbbb27edca5efe01c9"></a><!-- doxytag: member="tbb::pipeline::~pipeline" ref="49513c6c24f9d5bbbb27edca5efe01c9" args="()" -->
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline           </td>
+          <td class="memname">bool tbb::mutex::try_lock           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"><code> [virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <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. 
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<li><a class="el" href="a00313.html">mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00151.html b/doc/html/a00151.html
index 831986b..f2ccb46 100644
--- a/doc/html/a00151.html
+++ b/doc/html/a00151.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,27 +21,73 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00151.html">pre_scan_tag</a></div>
-<h1>tbb::pre_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::pre_scan_tag" -->Used to indicate that the initial scan is being performed.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00150.html">mutex</a>::<a class="el" href="a00151.html">scoped_lock</a></div>
+<h1>tbb::mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::mutex::scoped_lock" -->The scoped locking pattern.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00329.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00313.html">mutex.h</a>></code>
 <p>
-<a href="a00036.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00031.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="d45d2cf548e51140ad6faafbea8ca6b5"></a><!-- doxytag: member="tbb::pre_scan_tag::is_final_scan" ref="d45d2cf548e51140ad6faafbea8ca6b5" args="()" -->
-static 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="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#1d403ae51b484df5d86d85ae38f11e6e">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="a00151.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00150.html">mutex</a> &<a class="el" href="a00150.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#605a6b9af0f8cdabdf81825e0de99600"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#0ebbbecaf4311e9df7362cb76ceaa368">~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="862e022841cdc522e4296a5533b22efd"></a><!-- doxytag: member="tbb::mutex::scoped_lock::acquire" ref="862e022841cdc522e4296a5533b22efd" args="(mutex &mutex)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00150.html">mutex</a> &<a class="el" href="a00150.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="591e0c49b82bcedffcbe0923f1b915ec"></a><!-- doxytag: member="tbb::mutex::scoped_lock::try_acquire" ref="591e0c49b82bcedffcbe0923f1b915ec" args="(mutex &mutex)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00150.html">mutex</a> &<a class="el" href="a00150.html">mutex</a>)</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="0d51d18cd99df3b2e93bf07378d0992c"></a><!-- doxytag: member="tbb::mutex::scoped_lock::release" ref="0d51d18cd99df3b2e93bf07378d0992c" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="93062a14ad2e50e2b7b485b913170779"></a><!-- doxytag: member="tbb::mutex::scoped_lock::mutex" ref="93062a14ad2e50e2b7b485b913170779" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the initial scan is being performed. 
+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="605a6b9af0f8cdabdf81825e0de99600"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="605a6b9af0f8cdabdf81825e0de99600" args="(mutex &mutex)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00150.html">mutex</a> & </td>
+          <td class="paramname"> <em>mutex</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00329.html">parallel_scan.h</a></ul>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00313.html">mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00152.html b/doc/html/a00152.html
index a51c5a2..2f7a702 100644
--- a/doc/html/a00152.html
+++ b/doc/html/a00152.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,49 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00152.html">queuing_mutex</a></div>
-<h1>tbb::queuing_mutex Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00152.html">null_mutex</a></div>
+<h1>tbb::null_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::null_mutex" -->A mutex which does nothing.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00348.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00315.html">null_mutex.h</a>></code>
 <p>
-<a href="a00047.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b389ad9c4db7293e4bdb5b8cda69ec04"></a><!-- doxytag: member="tbb::queuing_mutex::queuing_mutex" ref="b389ad9c4db7293e4bdb5b8cda69ec04" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_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="96c1fe92760dcd1c5a7ed52c6599a72f"></a><!-- doxytag: member="tbb::queuing_mutex::internal_construct" ref="96c1fe92760dcd1c5a7ed52c6599a72f" args="()" -->
-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="420932f70ff3b85f7280ff11a133938d"></a><!-- doxytag: member="tbb::queuing_mutex::is_rw_mutex" ref="420932f70ff3b85f7280ff11a133938d" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a960bed8b19a4d111ca047de206f5f77"></a><!-- doxytag: member="tbb::null_mutex::is_rw_mutex" ref="a960bed8b19a4d111ca047de206f5f77" args="" -->
 static 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="dc0c749f3a4e6ea75418677cb8f9205f"></a><!-- doxytag: member="tbb::queuing_mutex::is_recursive_mutex" ref="dc0c749f3a4e6ea75418677cb8f9205f" args="" -->
-static 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="a0fefed74b341d43ccf0e2fc30d31b75"></a><!-- doxytag: member="tbb::null_mutex::is_recursive_mutex" ref="a0fefed74b341d43ccf0e2fc30d31b75" args="" -->
+static 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="55d5339e4ca04b759f90c0c1ef966539"></a><!-- doxytag: member="tbb::queuing_mutex::is_fair_mutex" ref="55d5339e4ca04b759f90c0c1ef966539" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="707cf399055d68177b1d64c2e112603a"></a><!-- doxytag: member="tbb::null_mutex::is_fair_mutex" ref="707cf399055d68177b1d64c2e112603a" args="" -->
 static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="a00153.html">scoped_lock</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00153.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00153.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Queuing lock with local-only spinning. 
+A mutex which does nothing. 
+<p>
+A <a class="el" href="a00152.html">null_mutex</a> does no operation and simulates success. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00348.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00315.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00153.html b/doc/html/a00153.html
index 6b2f95c..6227534 100644
--- a/doc/html/a00153.html
+++ b/doc/html/a00153.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,89 +21,33 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00152.html">queuing_mutex</a>::<a class="el" href="a00153.html">scoped_lock</a></div>
-<h1>tbb::queuing_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_mutex::scoped_lock" -->The scoped locking pattern.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00152.html">null_mutex</a>::<a class="el" href="a00153.html">scoped_lock</a></div>
+<h1>tbb::null_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_mutex::scoped_lock" -->Represents acquisition of a mutex.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00348.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00315.html">null_mutex.h</a>></code>
 <p>
-<a href="a00048.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="765e64065919fdd9665e78b5ec4d3c6f"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::scoped_lock" ref="765e64065919fdd9665e78b5ec4d3c6f" args="(null_mutex &)" -->
+ </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00152.html">null_mutex</a> &)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#db0fa3967491014572e24d6607bdc971"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00152.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6889f00ca3946906e89e856988bb890"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::acquire" ref="f6889f00ca3946906e89e856988bb890" args="(null_mutex &)" -->
+void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00152.html">null_mutex</a> &)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#9b51ef972f5618ac17caadb58841ab6d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90eb562a9de52b33362a6fe237b3df42"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::try_acquire" ref="90eb562a9de52b33362a6fe237b3df42" args="(null_mutex &)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00152.html">null_mutex</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="533e4fc8355ee321206a0609c42d909d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::acquire" ref="533e4fc8355ee321206a0609c42d909d" args="(queuing_mutex &m)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00152.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29fdf07b4c295850a6e433001c2c6a7"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::release" ref="b29fdf07b4c295850a6e433001c2c6a7" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>release</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="e5a014fb817599386a87170cf2cf51a9"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::try_acquire" ref="e5a014fb817599386a87170cf2cf51a9" args="(queuing_mutex &m)" -->
-bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00152.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="3bf2b8c87ff22115be9b2eac179f2d30"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::release" ref="3bf2b8c87ff22115be9b2eac179f2d30" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">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="db0fa3967491014572e24d6607bdc971"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="db0fa3967491014572e24d6607bdc971" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct lock that has not acquired a mutex. 
-<p>
-Equivalent to zero-initialization of *this. 
-</div>
-</div><p>
-<a class="anchor" name="9b51ef972f5618ac17caadb58841ab6d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="9b51ef972f5618ac17caadb58841ab6d" args="(queuing_mutex &m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00152.html">queuing_mutex</a> & </td>
-          <td class="paramname"> <em>m</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Acquire lock on given mutex. 
+Represents acquisition of a mutex. 
 <p>
-Upon entry, *this should not be in the "have acquired a mutex" state. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00348.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00315.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00154.html b/doc/html/a00154.html
index 86e4cb0..bf63719 100644
--- a/doc/html/a00154.html
+++ b/doc/html/a00154.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_rw_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,55 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00154.html">queuing_rw_mutex</a></div>
-<h1>tbb::queuing_rw_mutex Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00154.html">null_rw_mutex</a></div>
+<h1>tbb::null_rw_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::null_rw_mutex" -->A rw mutex which does nothing.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00349.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00316.html">null_rw_mutex.h</a>></code>
 <p>
-<a href="a00049.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="85c90877c3447690ac4e2ac4ff8dea5e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::queuing_rw_mutex" ref="85c90877c3447690ac4e2ac4ff8dea5e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">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="1ba73e3d95cfdf8323880bc623af9099"></a><!-- doxytag: member="tbb::queuing_rw_mutex::~queuing_rw_mutex" ref="1ba73e3d95cfdf8323880bc623af9099" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~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="eb88522d145ad7bcf5bebfa7d2a6122b"></a><!-- doxytag: member="tbb::queuing_rw_mutex::internal_construct" ref="eb88522d145ad7bcf5bebfa7d2a6122b" args="()" -->
-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="0dc1e28d3033e8f9556f5b13b7b57d0f"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_rw_mutex" ref="0dc1e28d3033e8f9556f5b13b7b57d0f" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f3235cbf63812f72e5755a4c820f523"></a><!-- doxytag: member="tbb::null_rw_mutex::is_rw_mutex" ref="2f3235cbf63812f72e5755a4c820f523" args="" -->
 static 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="e6ad08ef251f9ea898bd5f67963869c5"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_recursive_mutex" ref="e6ad08ef251f9ea898bd5f67963869c5" args="" -->
-static 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="e33ac3b047901e69e7997a16e221a330"></a><!-- doxytag: member="tbb::null_rw_mutex::is_recursive_mutex" ref="e33ac3b047901e69e7997a16e221a330" args="" -->
+static 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="147b34120505e419f6ea8d631ec4375d"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_fair_mutex" ref="147b34120505e419f6ea8d631ec4375d" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5248faf1412f9283185a0b5d72d7456"></a><!-- doxytag: member="tbb::null_rw_mutex::is_fair_mutex" ref="e5248faf1412f9283185a0b5d72d7456" args="" -->
 static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="a00155.html">scoped_lock</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00155.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00155.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Reader-writer lock with local-only spinning. 
+A rw mutex which does nothing. 
 <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> 
+A <a class="el" href="a00154.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00349.html">queuing_rw_mutex.h</a></ul>
+<li><a class="el" href="a00316.html">null_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00155.html b/doc/html/a00155.html
index 0bb3fb3..521d189 100644
--- a/doc/html/a00155.html
+++ b/doc/html/a00155.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::null_rw_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,127 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00154.html">queuing_rw_mutex</a>::<a class="el" href="a00155.html">scoped_lock</a></div>
-<h1>tbb::queuing_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_rw_mutex::scoped_lock" -->The scoped locking pattern.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00154.html">null_rw_mutex</a>::<a class="el" href="a00155.html">scoped_lock</a></div>
+<h1>tbb::null_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_rw_mutex::scoped_lock" -->Represents acquisition of a mutex.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00349.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00316.html">null_rw_mutex.h</a>></code>
 <p>
-<a href="a00050.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e11281a13a7b6243c6c9ab243c5ad5a8"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::scoped_lock" ref="e11281a13a7b6243c6c9ab243c5ad5a8" args="(null_rw_mutex &, bool=true)" -->
+ </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00154.html">null_rw_mutex</a> &, bool=true)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72c4c302fdfc20187a650348e432b0a7"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::acquire" ref="72c4c302fdfc20187a650348e432b0a7" args="(null_rw_mutex &, bool=true)" -->
+void </td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00154.html">null_rw_mutex</a> &, bool=true)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#fbb8798792d3aebb136c46fc63d2529e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32c7d67a660d23ebbaab1a1d2826d31a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::~scoped_lock" ref="32c7d67a660d23ebbaab1a1d2826d31a" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa1e2a5592ee2672470ea44d98f1c498"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::upgrade_to_writer" ref="fa1e2a5592ee2672470ea44d98f1c498" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</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="a8dd5ab8686e76de21587544dbb681e0"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::acquire" ref="a8dd5ab8686e76de21587544dbb681e0" args="(queuing_rw_mutex &m, bool write=true)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="efcb7948649e1652d59aaff9c8ea40f1"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::downgrade_to_reader" ref="efcb7948649e1652d59aaff9c8ea40f1" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>downgrade_to_reader</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="2e4ff6c9ec2fee6682f95290d1f42baa"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::try_acquire" ref="2e4ff6c9ec2fee6682f95290d1f42baa" args="(queuing_rw_mutex &m, bool write=true)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="56686c4dfe4a32a1d9bd8e7e729130e6"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::try_acquire" ref="56686c4dfe4a32a1d9bd8e7e729130e6" args="(null_rw_mutex &, bool=true)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00154.html">null_rw_mutex</a> &, bool=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="67ae221109ddc69510ab593874e435d4"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::release" ref="67ae221109ddc69510ab593874e435d4" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6146c803a4ad2f14263fdc019a72b5a9"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::release" ref="6146c803a4ad2f14263fdc019a72b5a9" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>release</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="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#11ba1da4a722c9e6f73339a52c487e82"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d2f93edf7b15ec4bcee138823220c52"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::downgrade_to_reader" ref="0d2f93edf7b15ec4bcee138823220c52" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">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="c62e365be7bcbba091c9ea7454a4d22c"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="c62e365be7bcbba091c9ea7454a4d22c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct lock that has not acquired a mutex. 
-<p>
-Equivalent to zero-initialization of *this. 
-</div>
-</div><p>
-<a class="anchor" name="fbb8798792d3aebb136c46fc63d2529e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="fbb8798792d3aebb136c46fc63d2529e" args="(queuing_rw_mutex &m, bool write=true)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00154.html">queuing_rw_mutex</a> & </td>
-          <td class="paramname"> <em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"> <em>write</em> = <code>true</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Acquire lock on given mutex. 
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="11ba1da4a722c9e6f73339a52c487e82"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer" ref="11ba1da4a722c9e6f73339a52c487e82" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Upgrade reader to become a writer. 
+Represents acquisition of a mutex. 
 <p>
-Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00349.html">queuing_rw_mutex.h</a></ul>
+<li><a class="el" href="a00316.html">null_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00156.html b/doc/html/a00156.html
index a427a14..9778fed 100644
--- a/doc/html/a00156.html
+++ b/doc/html/a00156.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::parallel_do_feeder< Item > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,81 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00156.html">recursive_mutex</a></div>
-<h1>tbb::recursive_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::recursive_mutex" -->Mutex that allows recursive mutex acquisition.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00156.html">parallel_do_feeder</a></div>
+<h1>tbb::parallel_do_feeder< Item > Class Template Reference</h1><!-- doxytag: class="tbb::parallel_do_feeder" -->Class the user supplied algorithm body uses to add new tasks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00350.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00317.html">parallel_do.h</a>></code>
 <p>
-<a href="a00051.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d2fceb7f95c24a8cd1457d4527e4b8c6"></a><!-- doxytag: member="tbb::recursive_mutex::recursive_mutex" ref="d2fceb7f95c24a8cd1457d4527e4b8c6" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c342c69d47f4bb0b393535dee4015d6"></a><!-- doxytag: member="tbb::recursive_mutex::lock" ref="4c342c69d47f4bb0b393535dee4015d6" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#86e719b0afee25704af11ab97694d240"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0a96e26b7f074588dc31e32524856ae"></a><!-- doxytag: member="tbb::recursive_mutex::unlock" ref="f0a96e26b7f074588dc31e32524856ae" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="718cc53f6b33d8c396ccca0e4ebc5606"></a><!-- doxytag: member="tbb::recursive_mutex::is_rw_mutex" ref="718cc53f6b33d8c396ccca0e4ebc5606" args="" -->
-static 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="f6149d7541063d8b35afd98df6f0f89d"></a><!-- doxytag: member="tbb::recursive_mutex::is_recursive_mutex" ref="f6149d7541063d8b35afd98df6f0f89d" args="" -->
-static 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="f01aacad6b9b9d51573c0803323182fe"></a><!-- doxytag: member="tbb::recursive_mutex::is_fair_mutex" ref="f01aacad6b9b9d51573c0803323182fe" args="" -->
-static 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="40baaf0f6856f4491dd0adf896c93516"></a><!-- doxytag: member="tbb::parallel_do_feeder::add" ref="40baaf0f6856f4491dd0adf896c93516" args="(const Item &item)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="a00157.html">scoped_lock</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b381179b22f5f5e8511470c73d64b37f"></a><!-- doxytag: member="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl" ref="b381179b22f5f5e8511470c73d64b37f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00157.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Mutex that allows recursive mutex acquisition. 
-<p>
-Mutex that allows recursive mutex acquisition. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="86e719b0afee25704af11ab97694d240"></a><!-- doxytag: member="tbb::recursive_mutex::try_lock" ref="86e719b0afee25704af11ab97694d240" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::recursive_mutex::try_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename Item><br>
+ class tbb::parallel_do_feeder< Item ></h3>
 
+Class the user supplied algorithm body uses to add new tasks. 
 <p>
-Try acquiring lock (non-blocking). 
+<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>
-Return true if lock acquired; false otherwise. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00350.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00317.html">parallel_do.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00157.html b/doc/html/a00157.html
index 7a2754c..a680b45 100644
--- a/doc/html/a00157.html
+++ b/doc/html/a00157.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::parallel_while< Body > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,51 +21,114 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00156.html">recursive_mutex</a>::<a class="el" href="a00157.html">scoped_lock</a></div>
-<h1>tbb::recursive_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::recursive_mutex::scoped_lock" -->The scoped locking pattern.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00157.html">parallel_while</a></div>
+<h1>tbb::parallel_while< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::parallel_while" -->Parallel iteration over a stream, with optional addition of more work.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00350.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00351.html">parallel_while.h</a>></code>
 <p>
-<a href="a00052.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa297e53d3af2a101e712bc200233e9c"></a><!-- doxytag: member="tbb::parallel_while::value_type" ref="fa297e53d3af2a101e712bc200233e9c" args="" -->
+typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">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="d82d4d36fbf9727a493d26ae50855fe7"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="d82d4d36fbf9727a493d26ae50855fe7" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="36e26ba3880c7bcf804a97ba0cbe133f"></a><!-- doxytag: member="tbb::parallel_while::parallel_while" ref="36e26ba3880c7bcf804a97ba0cbe133f" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dec17713c4c1321ac8fec66816d0c602"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="dec17713c4c1321ac8fec66816d0c602" args="(recursive_mutex &mutex)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00156.html">recursive_mutex</a> &<a class="el" href="a00142.html">mutex</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="6fcfc973cc56b79c6d0fbb8a31be7e84"></a><!-- doxytag: member="tbb::parallel_while::~parallel_while" ref="6fcfc973cc56b79c6d0fbb8a31be7e84" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</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="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</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="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</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="7fb04da37cccf8c99b1f9102d9074f9a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::acquire" ref="7fb04da37cccf8c99b1f9102d9074f9a" args="(recursive_mutex &mutex)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00156.html">recursive_mutex</a> &<a class="el" href="a00142.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream.  <a href="#b32a0a6e5e09ebb7fad3e6652c19afe5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</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="36bfc3e93e3ef6340abef4901444d340"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::try_acquire" ref="36bfc3e93e3ef6340abef4901444d340" args="(recursive_mutex &mutex)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00156.html">recursive_mutex</a> &<a class="el" href="a00142.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running.  <a href="#e131c560057a58229992b61eb8dba4c6"></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="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac480ea0e9d5ea0345a67d57008b6263"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::release" ref="ac480ea0e9d5ea0345a67d57008b6263" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a> ()</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="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &item)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00157.html">tbb::parallel_while</a>< Body >::add           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="459818b78a3e9985dc5a9d5638b6593e"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::recursive_mutex" ref="459818b78a3e9985dc5a9d5638b6593e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
+<p>
+Add a work item while running. 
+<p>
+Should be executed only by body.apply or a thread spawned therefrom. 
+</div>
+</div><p>
+<a class="anchor" name="b32a0a6e5e09ebb7fad3e6652c19afe5"></a><!-- doxytag: member="tbb::parallel_while::run" ref="b32a0a6e5e09ebb7fad3e6652c19afe5" args="(Stream &stream, const Body &body)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+<div class="memtemplate">
+template<typename Stream> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00157.html">tbb::parallel_while</a>< Body >::run           </td>
+          <td>(</td>
+          <td class="paramtype">Stream & </td>
+          <td class="paramname"> <em>stream</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"> <em>body</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-</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. 
+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 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00350.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00351.html">parallel_while.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00158.html b/doc/html/a00158.html
index 6789e29..88c77b2 100644
--- a/doc/html/a00158.html
+++ b/doc/html/a00158.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::scalable_allocator< T > Class Template Reference</title>
+<title>tbb::pipeline Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,86 +21,82 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00158.html">scalable_allocator</a></div>
-<h1>tbb::scalable_allocator< T > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00158.html">pipeline</a></div>
+<h1>tbb::pipeline Class Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::scalable_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeling that applies filters to items.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00351.html">scalable_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00360.html">pipeline.h</a>></code>
 <p>
-<a href="a00053.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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a1cf13c339ee177a103a7e19bf2710a"></a><!-- doxytag: member="tbb::scalable_allocator::value_type" ref="5a1cf13c339ee177a103a7e19bf2710a" args="" -->
-typedef internal::allocator_type<<br>
- T >::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="a5121ec62bc79faba6a4b674d59e7260"></a><!-- doxytag: member="tbb::scalable_allocator::pointer" ref="a5121ec62bc79faba6a4b674d59e7260" args="" -->
-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="846a6fcec3bc7fa3839a12266a729a02"></a><!-- doxytag: member="tbb::scalable_allocator::const_pointer" ref="846a6fcec3bc7fa3839a12266a729a02" args="" -->
-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="254d7749de9277bb7711470c04d963ea"></a><!-- doxytag: member="tbb::scalable_allocator::reference" ref="254d7749de9277bb7711470c04d963ea" args="" -->
-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="acad193a7f6e16253f772ba3e9b2c98f"></a><!-- doxytag: member="tbb::scalable_allocator::const_reference" ref="acad193a7f6e16253f772ba3e9b2c98f" args="" -->
-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="4a5cb7482f222a14b513bbdd4ad8507d"></a><!-- doxytag: member="tbb::scalable_allocator::size_type" ref="4a5cb7482f222a14b513bbdd4ad8507d" args="" -->
-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="cb96c23f650cf91a73e2810b54c481bb"></a><!-- doxytag: member="tbb::scalable_allocator::difference_type" ref="cb96c23f650cf91a73e2810b54c481bb" args="" -->
-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="eee1873729ed05c7f92544c3ff0c08bc"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="eee1873729ed05c7f92544c3ff0c08bc" args="(const scalable_allocator &)" -->
- </td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00158.html">scalable_allocator</a> &)  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#596dc3beba27099c4c8581cb419e1a59">pipeline</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="a00158.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a> ()</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d56dc9f231c59f912297ac3c3b3b93b6"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="d56dc9f231c59f912297ac3c3b3b93b6" args="(const scalable_allocator< U > &)" -->
-template<typename U> </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="a00158.html">scalable_allocator</a>< U > &)  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="38fb5c9c8395dd6f89a4ae2011a83e0d"></a><!-- doxytag: member="tbb::pipeline::add_filter" ref="38fb5c9c8395dd6f89a4ae2011a83e0d" args="(filter &filter_)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00144.html">filter</a> &filter_)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78fa13a188b542ea724d45a9dbf5a071"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="78fa13a188b542ea724d45a9dbf5a071" args="(reference x) const " -->
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </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="f627616049b3fe36801f37ee40403ef8"></a><!-- doxytag: member="tbb::pipeline::run" ref="f627616049b3fe36801f37ee40403ef8" args="(size_t max_number_of_live_tokens)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#f627616049b3fe36801f37ee40403ef8">run</a> (size_t max_number_of_live_tokens)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14be4ad8eb478c87e240e605221ab455"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="14be4ad8eb478c87e240e605221ab455" args="(const_reference x) const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </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="93d7fec8cd607b803dd2d79fb46bd260"></a><!-- doxytag: member="tbb::pipeline::run" ref="93d7fec8cd607b803dd2d79fb46bd260" args="(size_t max_number_of_live_tokens, tbb::task_group_context &context)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="726b1586d05d44665a36e1c7b2699bfd"></a><!-- doxytag: member="tbb::scalable_allocator::allocate" ref="726b1586d05d44665a36e1c7b2699bfd" args="(size_type n, const void *=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a> (size_type n, const void *=0)</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="2c84aef5b834b555ee220b176e25931e"></a><!-- doxytag: member="tbb::pipeline::clear" ref="2c84aef5b834b555ee220b176e25931e" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#2c84aef5b834b555ee220b176e25931e">clear</a> ()</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="f806a238c18cbcfb531e1e0a0d2ec59d"></a><!-- doxytag: member="tbb::scalable_allocator::deallocate" ref="f806a238c18cbcfb531e1e0a0d2ec59d" args="(pointer p, size_type)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a> (pointer p, size_type)</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="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::pipeline::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></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="880e766f1d913988c21973dbdd874fd5"></a><!-- doxytag: member="tbb::scalable_allocator::max_size" ref="880e766f1d913988c21973dbdd874fd5" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a> () const   throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></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="5a9891a26790b98e9b9a68dad875faa8"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="5a9891a26790b98e9b9a68dad875faa8" args="(pointer p, const value_type &val)" -->
-void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &val)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c991e50853b0cac7da039550344d3ef"></a><!-- doxytag: member="tbb::pipeline::filter" ref="4c991e50853b0cac7da039550344d3ef" args="" -->
+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="743f878b04a492bf7ae0e82a64dc20c8"></a><!-- doxytag: member="tbb::scalable_allocator::destroy" ref="743f878b04a492bf7ae0e82a64dc20c8" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::pipeline::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></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>rebind</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9d033d41ff53a0ae6ef824aceee7ecbc"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_cleaner" ref="9d033d41ff53a0ae6ef824aceee7ecbc" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_cleaner</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::scalable_allocator< T ></h3>
-
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+A processing pipeling that applies filters to items. 
 <p>
-The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="49513c6c24f9d5bbbb27edca5efe01c9"></a><!-- doxytag: member="tbb::pipeline::~pipeline" ref="49513c6c24f9d5bbbb27edca5efe01c9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <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. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00351.html">scalable_allocator.h</a></ul>
+<li><a class="el" href="a00360.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00159.html b/doc/html/a00159.html
index 5486048..586c7b3 100644
--- a/doc/html/a00159.html
+++ b/doc/html/a00159.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::scalable_allocator< void > Class Template Reference</title>
+<title>tbb::pre_scan_tag Struct Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00159.html">scalable_allocator< void ></a></div>
-<h1>tbb::scalable_allocator< void > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00159.html">pre_scan_tag</a></div>
+<h1>tbb::pre_scan_tag Struct Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::scalable_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::pre_scan_tag" -->Used to indicate that the initial scan is being performed.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00351.html">scalable_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00342.html">parallel_scan.h</a>></code>
 <p>
-<a href="a00055.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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="2046816029c2c7856f7684aed2af9cff"></a><!-- doxytag: member="tbb::scalable_allocator< void >::pointer" ref="2046816029c2c7856f7684aed2af9cff" args="" -->
-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="591c568d23f8aadf6ea8d1dc939c4e75"></a><!-- doxytag: member="tbb::scalable_allocator< void >::const_pointer" ref="591c568d23f8aadf6ea8d1dc939c4e75" args="" -->
-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="64dbab666af0740c30b77edac9f157ce"></a><!-- doxytag: member="tbb::scalable_allocator< void >::value_type" ref="64dbab666af0740c30b77edac9f157ce" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></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>rebind</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="d45d2cf548e51140ad6faafbea8ca6b5"></a><!-- doxytag: member="tbb::pre_scan_tag::is_final_scan" ref="d45d2cf548e51140ad6faafbea8ca6b5" args="()" -->
+static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::scalable_allocator< void ></h3>
-
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+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="a00351.html">scalable_allocator.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00342.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00160.html b/doc/html/a00160.html
index 740685d..e7634f9 100644
--- a/doc/html/a00160.html
+++ b/doc/html/a00160.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::queuing_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,38 +21,49 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00160.html">simple_partitioner</a></div>
-<h1>tbb::simple_partitioner Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00160.html">queuing_mutex</a></div>
+<h1>tbb::queuing_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::simple_partitioner" -->A simple partitioner.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00342.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00361.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="a00048.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="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</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="b389ad9c4db7293e4bdb5b8cda69ec04"></a><!-- doxytag: member="tbb::queuing_mutex::queuing_mutex" ref="b389ad9c4db7293e4bdb5b8cda69ec04" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_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="96c1fe92760dcd1c5a7ed52c6599a72f"></a><!-- doxytag: member="tbb::queuing_mutex::internal_construct" ref="96c1fe92760dcd1c5a7ed52c6599a72f" args="()" -->
+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="420932f70ff3b85f7280ff11a133938d"></a><!-- doxytag: member="tbb::queuing_mutex::is_rw_mutex" ref="420932f70ff3b85f7280ff11a133938d" args="" -->
+static 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="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
-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="dc0c749f3a4e6ea75418677cb8f9205f"></a><!-- doxytag: member="tbb::queuing_mutex::is_recursive_mutex" ref="dc0c749f3a4e6ea75418677cb8f9205f" args="" -->
+static 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="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
-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="55d5339e4ca04b759f90c0c1ef966539"></a><!-- doxytag: member="tbb::queuing_mutex::is_fair_mutex" ref="55d5339e4ca04b759f90c0c1ef966539" args="" -->
+static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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"><b>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="a00161.html">scoped_lock</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00161.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A simple partitioner. 
-<p>
-Divides the range until the range is not divisible. 
+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="a00342.html">partitioner.h</a></ul>
+<li><a class="el" href="a00361.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00161.html b/doc/html/a00161.html
index 34cf476..8087704 100644
--- a/doc/html/a00161.html
+++ b/doc/html/a00161.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::queuing_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,66 +21,50 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00161.html">spin_mutex</a></div>
-<h1>tbb::spin_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::spin_mutex" -->A lock that occupies a single byte.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00160.html">queuing_mutex</a>::<a class="el" href="a00161.html">scoped_lock</a></div>
+<h1>tbb::queuing_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_mutex::scoped_lock" -->The scoped locking pattern.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00352.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00361.html">queuing_mutex.h</a>></code>
 <p>
-<a href="a00057.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00049.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="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock.  <a href="#3d8fb44644fd8d41ada1fbeba7409be3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b3fa21632815f8fab2fd6c67ec0d48c"></a><!-- doxytag: member="tbb::spin_mutex::internal_construct" ref="4b3fa21632815f8fab2fd6c67ec0d48c" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#db0fa3967491014572e24d6607bdc971"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00160.html">queuing_mutex</a> &m)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f748989e19b6045e3a2d2ee73626a28"></a><!-- doxytag: member="tbb::spin_mutex::lock" ref="4f748989e19b6045e3a2d2ee73626a28" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#9b51ef972f5618ac17caadb58841ab6d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_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="533e4fc8355ee321206a0609c42d909d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::acquire" ref="533e4fc8355ee321206a0609c42d909d" args="(queuing_mutex &m)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00160.html">queuing_mutex</a> &m)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e843ee6265f57f27d228ba91e7308ef"></a><!-- doxytag: member="tbb::spin_mutex::unlock" ref="0e843ee6265f57f27d228ba91e7308ef" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</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="e5a014fb817599386a87170cf2cf51a9"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::try_acquire" ref="e5a014fb817599386a87170cf2cf51a9" args="(queuing_mutex &m)" -->
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00160.html">queuing_mutex</a> &m)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="5a7c93ca9e7ab656037a43984f24c051"></a><!-- doxytag: member="tbb::spin_mutex::is_rw_mutex" ref="5a7c93ca9e7ab656037a43984f24c051" args="" -->
-static 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="a967c455d0d80c9bbe030905201391b6"></a><!-- doxytag: member="tbb::spin_mutex::is_recursive_mutex" ref="a967c455d0d80c9bbe030905201391b6" args="" -->
-static 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="ec12e4036073fb684b6d2d33493ed0aa"></a><!-- doxytag: member="tbb::spin_mutex::is_fair_mutex" ref="ec12e4036073fb684b6d2d33493ed0aa" args="" -->
-static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="3bf2b8c87ff22115be9b2eac179f2d30"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::release" ref="3bf2b8c87ff22115be9b2eac179f2d30" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">release</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="a00162.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00162.html#_details">More...</a><br></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>
-A lock that occupies a single byte. 
+The scoped locking pattern. 
 <p>
-A <a class="el" href="a00161.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. 
+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="3d8fb44644fd8d41ada1fbeba7409be3"></a><!-- doxytag: member="tbb::spin_mutex::spin_mutex" ref="3d8fb44644fd8d41ada1fbeba7409be3" args="()" -->
+<a class="anchor" name="db0fa3967491014572e24d6607bdc971"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="db0fa3967491014572e24d6607bdc971" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">tbb::spin_mutex::spin_mutex           </td>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
@@ -91,20 +75,20 @@ A <a class="el" href="a00161.html">spin_mutex</a> is a spin mutex that fits in a
 <div class="memdoc">
 
 <p>
-Construct unacquired lock. 
+Construct lock that has not acquired a mutex. 
 <p>
 Equivalent to zero-initialization of *this. 
 </div>
 </div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><!-- doxytag: member="tbb::spin_mutex::try_lock" ref="8f9a58fb56a2b4c5efe1a7f7c1ae2074" args="()" -->
+<a class="anchor" name="9b51ef972f5618ac17caadb58841ab6d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="9b51ef972f5618ac17caadb58841ab6d" args="(queuing_mutex &m)" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::spin_mutex::try_lock           </td>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype"><a class="el" href="a00160.html">queuing_mutex</a> & </td>
+          <td class="paramname"> <em>m</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -113,13 +97,13 @@ Equivalent to zero-initialization of *this.
 <div class="memdoc">
 
 <p>
-Try acquiring lock (non-blocking). 
+Acquire lock on given mutex. 
 <p>
-Return true if lock acquired; false otherwise. 
+Upon entry, *this should not be in the "have acquired a mutex" state. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00352.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00361.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00162.html b/doc/html/a00162.html
index baa3982..8077a71 100644
--- a/doc/html/a00162.html
+++ b/doc/html/a00162.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::queuing_rw_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,71 +21,55 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00161.html">spin_mutex</a>::<a class="el" href="a00162.html">scoped_lock</a></div>
-<h1>tbb::spin_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00162.html">queuing_rw_mutex</a></div>
+<h1>tbb::queuing_rw_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00352.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00362.html">queuing_rw_mutex.h</a>></code>
 <p>
-<a href="a00058.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00050.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="29ae680ae7f5e685c2e15535b9c855b3"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="29ae680ae7f5e685c2e15535b9c855b3" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85c90877c3447690ac4e2ac4ff8dea5e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::queuing_rw_mutex" ref="85c90877c3447690ac4e2ac4ff8dea5e" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a> ()</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="5ce6807050a9e8f87bcb4a65dccb12ef"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="5ce6807050a9e8f87bcb4a65dccb12ef" args="(spin_mutex &m)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00161.html">spin_mutex</a> &m)</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="1ba73e3d95cfdf8323880bc623af9099"></a><!-- doxytag: member="tbb::queuing_rw_mutex::~queuing_rw_mutex" ref="1ba73e3d95cfdf8323880bc623af9099" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a> ()</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="3ee3c338732b1f64b0b32a757807a30d"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::acquire" ref="3ee3c338732b1f64b0b32a757807a30d" args="(spin_mutex &m)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00161.html">spin_mutex</a> &m)</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="eb88522d145ad7bcf5bebfa7d2a6122b"></a><!-- doxytag: member="tbb::queuing_rw_mutex::internal_construct" ref="eb88522d145ad7bcf5bebfa7d2a6122b" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00161.html">spin_mutex</a> &m)</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="0dc1e28d3033e8f9556f5b13b7b57d0f"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_rw_mutex" ref="0dc1e28d3033e8f9556f5b13b7b57d0f" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#9297ec188534b45dc0ca48f2f39a0501"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eeb615e68e963e6bf8d9c11402d0ce8e"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::release" ref="eeb615e68e963e6bf8d9c11402d0ce8e" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e6ad08ef251f9ea898bd5f67963869c5"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_recursive_mutex" ref="e6ad08ef251f9ea898bd5f67963869c5" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</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="ac6fa425d1f06c56d8b70abc51aac844"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::~scoped_lock" ref="ac6fa425d1f06c56d8b70abc51aac844" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="147b34120505e419f6ea8d631ec4375d"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_fair_mutex" ref="147b34120505e419f6ea8d631ec4375d" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <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="6ee2a2cdaf6a2128849e7d7723d9174f"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::spin_mutex" ref="6ee2a2cdaf6a2128849e7d7723d9174f" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="a00163.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00163.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="9297ec188534b45dc0ca48f2f39a0501"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::try_acquire" ref="9297ec188534b45dc0ca48f2f39a0501" args="(spin_mutex &m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_mutex::scoped_lock::try_acquire           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00161.html">spin_mutex</a> & </td>
-          <td class="paramname"> <em>m</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
+Reader-writer lock with local-only spinning. 
 <p>
-Try acquiring lock (non-blocking). 
+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>
-Return true if lock acquired; false otherwise. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00352.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00362.html">queuing_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00163.html b/doc/html/a00163.html
index 69e8010..7d37da7 100644
--- a/doc/html/a00163.html
+++ b/doc/html/a00163.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::queuing_rw_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,69 +21,57 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00163.html">spin_rw_mutex_v3</a></div>
-<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
-<small>
-[<a class="el" href="a00236.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3" -->Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00162.html">queuing_rw_mutex</a>::<a class="el" href="a00163.html">scoped_lock</a></div>
+<h1>tbb::queuing_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_rw_mutex::scoped_lock" -->The scoped locking pattern.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00353.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00362.html">queuing_rw_mutex.h</a>></code>
 <p>
-<a href="a00059.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00051.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="61332b2756de89f3f5f69310cbb6e70c"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::spin_rw_mutex_v3" ref="61332b2756de89f3f5f69310cbb6e70c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</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="9a815fb2759e55072ed413f1b6970cf3"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::~spin_rw_mutex_v3" ref="9a815fb2759e55072ed413f1b6970cf3" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00162.html">queuing_rw_mutex</a> &m, bool write=true)</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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4007d6e1523dbc3c2bb7f889ab789a8a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock" ref="4007d6e1523dbc3c2bb7f889ab789a8a" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#fbb8798792d3aebb136c46fc63d2529e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32c7d67a660d23ebbaab1a1d2826d31a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::~scoped_lock" ref="32c7d67a660d23ebbaab1a1d2826d31a" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire writer lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">try_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="a8dd5ab8686e76de21587544dbb681e0"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::acquire" ref="a8dd5ab8686e76de21587544dbb681e0" args="(queuing_rw_mutex &m, bool write=true)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00162.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring writer lock (non-blocking).  <a href="#088bb256be794cc47d3b83791632fdfc"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9f52ead2098eb5fb12da59d5ae53b55"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::unlock" ref="f9f52ead2098eb5fb12da59d5ae53b55" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</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="2e4ff6c9ec2fee6682f95290d1f42baa"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::try_acquire" ref="2e4ff6c9ec2fee6682f95290d1f42baa" args="(queuing_rw_mutex &m, bool write=true)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00162.html">queuing_rw_mutex</a> &m, bool write=true)</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="13f799708ac4ca437a16be202e263e18"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock_read" ref="13f799708ac4ca437a16be202e263e18" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">lock_read</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire reader lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">try_lock_read</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring reader lock (non-blocking).  <a href="#b8667415869013f840d976aa406d385a"></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="4c1e60f22c01604ca93c41b8334cc15e"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_rw_mutex" ref="4c1e60f22c01604ca93c41b8334cc15e" args="" -->
-static 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="681a816fe76d6ca7752303f9dcc3c4b2"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_recursive_mutex" ref="681a816fe76d6ca7752303f9dcc3c4b2" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</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="67ae221109ddc69510ab593874e435d4"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::release" ref="67ae221109ddc69510ab593874e435d4" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#67ae221109ddc69510ab593874e435d4">release</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4dd66d90df6247da6050e88b2aa3b820"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_fair_mutex" ref="4dd66d90df6247da6050e88b2aa3b820" args="" -->
-static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</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="a00163.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</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="a00164.html">scoped_lock</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#11ba1da4a722c9e6f73339a52c487e82"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d2f93edf7b15ec4bcee138823220c52"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::downgrade_to_reader" ref="0d2f93edf7b15ec4bcee138823220c52" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00164.html#_details">More...</a><br></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>
-Fast, unfair, spinning reader-writer lock with backoff and writer-preference. 
+The scoped locking pattern. 
 <p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="088bb256be794cc47d3b83791632fdfc"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock" ref="088bb256be794cc47d3b83791632fdfc" args="()" -->
+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="c62e365be7bcbba091c9ea7454a4d22c"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="c62e365be7bcbba091c9ea7454a4d22c" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock           </td>
+          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
@@ -94,34 +82,66 @@ Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
 <div class="memdoc">
 
 <p>
-Try acquiring writer lock (non-blocking). 
+Construct lock that has not acquired a mutex. 
 <p>
-Return true if lock acquired; false otherwise. 
+Equivalent to zero-initialization of *this. 
 </div>
 </div><p>
-<a class="anchor" name="b8667415869013f840d976aa406d385a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock_read" ref="b8667415869013f840d976aa406d385a" args="()" -->
+<a class="anchor" name="fbb8798792d3aebb136c46fc63d2529e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="fbb8798792d3aebb136c46fc63d2529e" args="(queuing_rw_mutex &m, bool write=true)" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock_read           </td>
+          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00162.html">queuing_rw_mutex</a> & </td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"> <em>write</em> = <code>true</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="11ba1da4a722c9e6f73339a52c487e82"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer" ref="11ba1da4a722c9e6f73339a52c487e82" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
+          <td width="100%"></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Try acquiring reader lock (non-blocking). 
+Upgrade reader to become a writer. 
 <p>
-Return true if reader lock acquired; false otherwise. 
+Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00353.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00362.html">queuing_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00164.html b/doc/html/a00164.html
index 7047970..ad8ebb4 100644
--- a/doc/html/a00164.html
+++ b/doc/html/a00164.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::recursive_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,110 +21,64 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00163.html">spin_rw_mutex_v3</a>::<a class="el" href="a00164.html">scoped_lock</a></div>
-<h1>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3::scoped_lock" -->The scoped locking pattern.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00164.html">recursive_mutex</a></div>
+<h1>tbb::recursive_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::recursive_mutex" -->Mutex that allows recursive mutex acquisition.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00353.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00363.html">recursive_mutex.h</a>></code>
 <p>
-<a href="a00060.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00052.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="a00164.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d2fceb7f95c24a8cd1457d4527e4b8c6"></a><!-- doxytag: member="tbb::recursive_mutex::recursive_mutex" ref="d2fceb7f95c24a8cd1457d4527e4b8c6" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#d6ea60dee5563f702379bf5e51aa8806"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00164.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c342c69d47f4bb0b393535dee4015d6"></a><!-- doxytag: member="tbb::recursive_mutex::lock" ref="4c342c69d47f4bb0b393535dee4015d6" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#42a92d4f8fdde425b111cfa8a9228071"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d7eaaa3f2e2c5dc11e7005811b1bdd04"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::~scoped_lock" ref="d7eaaa3f2e2c5dc11e7005811b1bdd04" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#86e719b0afee25704af11ab97694d240">try_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="b0b646ec5be02a127d159bbb7ca65353"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::acquire" ref="b0b646ec5be02a127d159bbb7ca65353" args="(spin_rw_mutex &m, bool write=true)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#86e719b0afee25704af11ab97694d240"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0a96e26b7f074588dc31e32524856ae"></a><!-- doxytag: member="tbb::recursive_mutex::unlock" ref="f0a96e26b7f074588dc31e32524856ae" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">unlock</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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="718cc53f6b33d8c396ccca0e4ebc5606"></a><!-- doxytag: member="tbb::recursive_mutex::is_rw_mutex" ref="718cc53f6b33d8c396ccca0e4ebc5606" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#3f0b1e3f2efab63336400348bd070226"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="61b14d00a78185c9b2d206ebfc379124"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::release" ref="61b14d00a78185c9b2d206ebfc379124" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">release</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6149d7541063d8b35afd98df6f0f89d"></a><!-- doxytag: member="tbb::recursive_mutex::is_recursive_mutex" ref="f6149d7541063d8b35afd98df6f0f89d" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</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="c2c2c38a08cb9080e87099fac3e5bc94"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::downgrade_to_reader" ref="c2c2c38a08cb9080e87099fac3e5bc94" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f01aacad6b9b9d51573c0803323182fe"></a><!-- doxytag: member="tbb::recursive_mutex::is_fair_mutex" ref="f01aacad6b9b9d51573c0803323182fe" args="" -->
+static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="9879626968d9b9a04cd2ec0fb2e84ae1"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::try_acquire" ref="9879626968d9b9a04cd2ec0fb2e84ae1" args="(spin_rw_mutex &m, bool write=true)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &m, bool write=true)</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="a00165.html">scoped_lock</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00165.html#_details">More...</a><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="d6ea60dee5563f702379bf5e51aa8806"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="d6ea60dee5563f702379bf5e51aa8806" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct lock that has not acquired a mutex. 
+Mutex that allows recursive mutex acquisition. 
 <p>
-Equivalent to zero-initialization of *this. 
-</div>
-</div><p>
-<a class="anchor" name="42a92d4f8fdde425b111cfa8a9228071"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="42a92d4f8fdde425b111cfa8a9228071" args="(spin_rw_mutex &m, bool write=true)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00163.html">spin_rw_mutex</a> & </td>
-          <td class="paramname"> <em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"> <em>write</em> = <code>true</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Acquire lock on given mutex. 
+Mutex that allows recursive mutex acquisition. 
 <p>
-Upon entry, *this should not be in the "have acquired a mutex" state. 
-</div>
-</div><p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="3f0b1e3f2efab63336400348bd070226"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer" ref="3f0b1e3f2efab63336400348bd070226" args="()" -->
+<a class="anchor" name="86e719b0afee25704af11ab97694d240"></a><!-- doxytag: member="tbb::recursive_mutex::try_lock" ref="86e719b0afee25704af11ab97694d240" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer           </td>
+          <td class="memname">bool tbb::recursive_mutex::try_lock           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
@@ -135,13 +89,13 @@ Upon entry, *this should not be in the "have acquired a mutex" state.
 <div class="memdoc">
 
 <p>
-Upgrade reader to become a writer. 
+Try acquiring lock (non-blocking). 
 <p>
-Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
+Return true if lock acquired; false otherwise. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00353.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00363.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00165.html b/doc/html/a00165.html
index 75b3c13..0922378 100644
--- a/doc/html/a00165.html
+++ b/doc/html/a00165.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::recursive_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,25 +21,51 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00165.html">split</a></div>
-<h1>tbb::split Class Reference<br>
-<small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::split" -->Dummy type that distinguishes splitting constructor from copy constructor.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00164.html">recursive_mutex</a>::<a class="el" href="a00165.html">scoped_lock</a></div>
+<h1>tbb::recursive_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::recursive_mutex::scoped_lock" -->The scoped locking pattern.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00386.html">tbb_stddef.h</a>></code>
+<code>#include <<a class="el" href="a00363.html">recursive_mutex.h</a>></code>
 <p>
-<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 Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d82d4d36fbf9727a493d26ae50855fe7"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="d82d4d36fbf9727a493d26ae50855fe7" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00164.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dec17713c4c1321ac8fec66816d0c602"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="dec17713c4c1321ac8fec66816d0c602" args="(recursive_mutex &mutex)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00164.html">recursive_mutex</a> &<a class="el" href="a00150.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="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~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="7fb04da37cccf8c99b1f9102d9074f9a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::acquire" ref="7fb04da37cccf8c99b1f9102d9074f9a" args="(recursive_mutex &mutex)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00164.html">recursive_mutex</a> &<a class="el" href="a00150.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="36bfc3e93e3ef6340abef4901444d340"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::try_acquire" ref="36bfc3e93e3ef6340abef4901444d340" args="(recursive_mutex &mutex)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00164.html">recursive_mutex</a> &<a class="el" href="a00150.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00164.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac480ea0e9d5ea0345a67d57008b6263"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::release" ref="ac480ea0e9d5ea0345a67d57008b6263" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="459818b78a3e9985dc5a9d5638b6593e"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::recursive_mutex" ref="459818b78a3e9985dc5a9d5638b6593e" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Dummy type that distinguishes splitting constructor from copy constructor. 
+The scoped locking pattern. 
 <p>
-See description of parallel_for and parallel_reduce for example usages. 
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00386.html">tbb_stddef.h</a></ul>
+<li><a class="el" href="a00363.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00166.html b/doc/html/a00166.html
index 346b24b..79c379f 100644
--- a/doc/html/a00166.html
+++ b/doc/html/a00166.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::scalable_allocator< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,578 +21,86 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00166.html">task</a></div>
-<h1>tbb::task Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00166.html">scalable_allocator</a></div>
+<h1>tbb::scalable_allocator< T > Class Template Reference<br>
 <small>
-[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task" -->Base class for user-defined tasks.  
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::scalable_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00354.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00364.html">scalable_allocator.h</a>></code>
 <p>
-Inherited by <a class="el" href="a00137.html">tbb::empty_task</a>, tbb::internal::function_task< F >, and tbb::internal::task_handle_task< F >.
-<p>
-Inheritance diagram for tbb::task:<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="a00054.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 internal::affinity_id </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity.  <a href="#d61bb32389d3857bf7511d69beaafb76"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a1cf13c339ee177a103a7e19bf2710a"></a><!-- doxytag: member="tbb::scalable_allocator::value_type" ref="5a1cf13c339ee177a103a7e19bf2710a" args="" -->
+typedef internal::allocator_type<<br>
+ T >::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task is running, and will be destroyed after method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> completes.  <a href="#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5121ec62bc79faba6a4b674d59e7260"></a><!-- doxytag: member="tbb::scalable_allocator::pointer" ref="a5121ec62bc79faba6a4b674d59e7260" args="" -->
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task to be rescheduled.  <a href="#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="846a6fcec3bc7fa3839a12266a729a02"></a><!-- doxytag: member="tbb::scalable_allocator::const_pointer" ref="846a6fcec3bc7fa3839a12266a729a02" args="" -->
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task is in ready pool, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="254d7749de9277bb7711470c04d963ea"></a><!-- doxytag: member="tbb::scalable_allocator::reference" ref="254d7749de9277bb7711470c04d963ea" args="" -->
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task object is freshly allocated or recycled.  <a href="#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acad193a7f6e16253f772ba3e9b2c98f"></a><!-- doxytag: member="tbb::scalable_allocator::const_reference" ref="acad193a7f6e16253f772ba3e9b2c98f" args="" -->
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task object is on free list, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a5cb7482f222a14b513bbdd4ad8507d"></a><!-- doxytag: member="tbb::scalable_allocator::size_type" ref="4a5cb7482f222a14b513bbdd4ad8507d" args="" -->
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task to be recycled as continuation  <a href="#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
-  <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
-<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
-<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
-<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
-<br>
-  <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
-<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
-<br>
- }</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb96c23f650cf91a73e2810b54c481bb"></a><!-- doxytag: member="tbb::scalable_allocator::difference_type" ref="cb96c23f650cf91a73e2810b54c481bb" args="" -->
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration of task states that the scheduler considers.  <a href="a00166.html#4a3c415562d17905390ea5b49d12293e">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="98245ee0473f84cb19dbbf8c81134908"></a><!-- doxytag: member="tbb::task::~task" ref="98245ee0473f84cb19dbbf8c81134908" args="()" -->
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~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="22c298cd40937a431a06777423f002f6"></a><!-- doxytag: member="tbb::task::execute" ref="22c298cd40937a431a06777423f002f6" args="()=0" -->
-virtual <a class="el" href="a00166.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">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="a00166.html#1434c79a5138993269d034008bff7329">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="#1434c79a5138993269d034008bff7329"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ff794f7053cd9148d5f280fbf07377f"></a><!-- doxytag: member="tbb::task::allocate_child" ref="1ff794f7053cd9148d5f280fbf07377f" args="()" -->
-internal::allocate_child_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">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="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a> (<a class="el" href="a00166.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="#43bfe64c0e9333c0ca895cc0c375512b"></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="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a> (<a class="el" href="a00166.html">task</a> &victim)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task.  <a href="#a57def00c8e9d932dbea0b3ee23991b9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">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="#a67a79e18f62b43a623a00cfbd76db4c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">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="#3b290d14109704e2b69dc1ac980a7a76"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db399855177438bbc9cc61d508dae8d2"></a><!-- doxytag: member="tbb::task::recycle_as_child_of" ref="db399855177438bbc9cc61d508dae8d2" args="(task &new_parent)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00166.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="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns.  <a href="#4f1be9bbcdb487830dbe298b68d85144"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7653ceef53a188d05b5c779e1104b698"></a><!-- doxytag: member="tbb::task::depth" ref="7653ceef53a188d05b5c779e1104b698" args="() const " -->
-intptr_t </td><td class="memItemRight" valign="bottom"><b>depth</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e864e9c80e3d79f00d77fb99f4757621"></a><!-- doxytag: member="tbb::task::set_depth" ref="e864e9c80e3d79f00d77fb99f4757621" args="(intptr_t)" -->
-void </td><td class="memItemRight" valign="bottom"><b>set_depth</b> (intptr_t)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c83fcc26f6513f0e06de70cbab9dee46"></a><!-- doxytag: member="tbb::task::add_to_depth" ref="c83fcc26f6513f0e06de70cbab9dee46" args="(int)" -->
-void </td><td class="memItemRight" valign="bottom"><b>add_to_depth</b> (int)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06a4206a57e8e12a439b14d6d41cfd92"></a><!-- doxytag: member="tbb::task::set_ref_count" ref="06a4206a57e8e12a439b14d6d41cfd92" args="(int count)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">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="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically increment reference count.  <a href="#f5fb43c7ad0de5a4b95703cebc39e345"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically decrement reference count.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a> (<a class="el" href="a00166.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="#f7737143d458f1ed1c0d7da3971d9e6b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db841c647eb6d754440c2f4e4a73c80b"></a><!-- doxytag: member="tbb::task::spawn" ref="db841c647eb6d754440c2f4e4a73c80b" args="(task_list &list)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a> (<a class="el" href="a00168.html">task_list</a> &list)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn multiple tasks and clear list. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ce28ca9baa771cfc37ecd72e69c4f3c"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="3ce28ca9baa771cfc37ecd72e69c4f3c" args="(task &child)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00166.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="894ab68378e502776d8220eea7ce9fa1"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="894ab68378e502776d8220eea7ce9fa1" args="(task_list &list)" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00168.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="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eee1873729ed05c7f92544c3ff0c08bc"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="eee1873729ed05c7f92544c3ff0c08bc" args="(const scalable_allocator &)" -->
+ </td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00166.html">scalable_allocator</a> &)  throw ()</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="#53d2615ad9c38859b4c8080936600283"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="314e98ee4347ccec83efcb9ee22e8596"></a><!-- doxytag: member="tbb::task::parent" ref="314e98ee4347ccec83efcb9ee22e8596" args="() const " -->
-<a class="el" href="a00166.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a> () const </td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d56dc9f231c59f912297ac3c3b3b93b6"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="d56dc9f231c59f912297ac3c3b3b93b6" args="(const scalable_allocator< U > &)" -->
+template<typename U> </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="a00166.html">scalable_allocator</a>< U > &)  throw ()</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="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
-<a class="el" href="a00167.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78fa13a188b542ea724d45a9dbf5a071"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="78fa13a188b542ea724d45a9dbf5a071" args="(reference x) const " -->
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Shared context that is used to communicate asynchronous state changes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9169402702f56bf519448aaf34450aa"></a><!-- doxytag: member="tbb::task::is_stolen_task" ref="f9169402702f56bf519448aaf34450aa" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14be4ad8eb478c87e240e605221ab455"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="14be4ad8eb478c87e240e605221ab455" args="(const_reference x) const " -->
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) 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="0af7b2d7e6e8b4333b2accfce3dfb374"></a><!-- doxytag: member="tbb::task::state" ref="0af7b2d7e6e8b4333b2accfce3dfb374" args="() const " -->
-<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="726b1586d05d44665a36e1c7b2699bfd"></a><!-- doxytag: member="tbb::scalable_allocator::allocate" ref="726b1586d05d44665a36e1c7b2699bfd" args="(size_type n, const void *=0)" -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a> (size_type n, const void *=0)</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="ad774f55eaec008ae02b236423209ced"></a><!-- doxytag: member="tbb::task::ref_count" ref="ad774f55eaec008ae02b236423209ced" args="() const " -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a> () const </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="f806a238c18cbcfb531e1e0a0d2ec59d"></a><!-- doxytag: member="tbb::scalable_allocator::deallocate" ref="f806a238c18cbcfb531e1e0a0d2ec59d" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a> (pointer p, size_type)</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="c26718b3b247cd13deb1a741902e7105"></a><!-- doxytag: member="tbb::task::is_owned_by_current_thread" ref="c26718b3b247cd13deb1a741902e7105" args="() const " -->
-bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a> () const </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="880e766f1d913988c21973dbdd874fd5"></a><!-- doxytag: member="tbb::scalable_allocator::max_size" ref="880e766f1d913988c21973dbdd874fd5" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#880e766f1d913988c21973dbdd874fd5">max_size</a> () const   throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Obsolete, and only retained for the sake of backward compatibility. Always returns true. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dca19d7a45487a7d67a0db517e2b57c9"></a><!-- doxytag: member="tbb::task::set_affinity" ref="dca19d7a45487a7d67a0db517e2b57c9" args="(affinity_id id)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</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="ae824c87fcc35467057fd3304c5e97ba"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="ae824c87fcc35467057fd3304c5e97ba" args="(pointer p, const value_type &value)" -->
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &value)</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="3a920a56b0bcf2801518fb45b2c9d2be"></a><!-- doxytag: member="tbb::task::affinity" ref="3a920a56b0bcf2801518fb45b2c9d2be" args="() const " -->
-<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="743f878b04a492bf7ae0e82a64dc20c8"></a><!-- doxytag: member="tbb::scalable_allocator::destroy" ref="743f878b04a492bf7ae0e82a64dc20c8" args="(pointer p)" -->
+void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</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 __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">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="#713c338c8eeaebdc5a6b10a69c039b06"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">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="#0f3fb4aac549ab642022450a4bd13326"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="025f18118c057c4c8db87ff2ce8df975"></a><!-- doxytag: member="tbb::task::is_cancelled" ref="025f18118c057c4c8db87ff2ce8df975" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">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="23acb0da0afd690da797f9f882027d34"></a><!-- doxytag: member="tbb::task::allocate_root" ref="23acb0da0afd690da797f9f882027d34" args="()" -->
-static internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">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"><a class="anchor" name="8ccc518caf31075a3e073996d2d240a4"></a><!-- doxytag: member="tbb::task::allocate_root" ref="8ccc518caf31075a3e073996d2d240a4" args="(task_group_context &ctx)" -->
-static internal::allocate_root_with_context_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00167.html">task_group_context</a> &ctx)</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">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00166.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="#ce8ce689c26a4ddf343829bc3c73290a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00168.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="#c33c7edbaec67aa8a56f48986a9dc69f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd43e8d6249738efafd12d6a4c72c5e3"></a><!-- doxytag: member="tbb::task::self" ref="bd43e8d6249738efafd12d6a4c72c5e3" args="()" -->
-static <a class="el" href="a00166.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">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="2bce8ec6e44706e70128f5cf91b76e67"></a><!-- doxytag: member="tbb::task::task" ref="2bce8ec6e44706e70128f5cf91b76e67" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">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="5eabadbca46f93ce6fb08290e85a0a65"></a><!-- doxytag: member="tbb::task::task_list" ref="5eabadbca46f93ce6fb08290e85a0a65" args="" -->
-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="e296810002652d771f692e20ca87e898"></a><!-- doxytag: member="tbb::task::internal::scheduler" ref="e296810002652d771f692e20ca87e898" args="" -->
-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="387b945c106854e1ed525f0668092930"></a><!-- doxytag: member="tbb::task::internal::allocate_root_proxy" ref="387b945c106854e1ed525f0668092930" args="" -->
-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="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
-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="9987b3b1174772e5e853bd94b9f15350"></a><!-- doxytag: member="tbb::task::internal::allocate_continuation_proxy" ref="9987b3b1174772e5e853bd94b9f15350" args="" -->
-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="1f9e255654086b52fe107e4d8bbc8b7d"></a><!-- doxytag: member="tbb::task::internal::allocate_child_proxy" ref="1f9e255654086b52fe107e4d8bbc8b7d" args="" -->
-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="0e99ce0045ea3c55d239f38ea026b8a7"></a><!-- doxytag: member="tbb::task::internal::allocate_additional_child_of_proxy" ref="0e99ce0045ea3c55d239f38ea026b8a7" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc65e26bdbb61f5e5a3d7ac92948bbd1"></a><!-- doxytag: member="tbb::task::internal::task_group_base" ref="bc65e26bdbb61f5e5a3d7ac92948bbd1" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::task_group_base</b></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>rebind</b></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="d61bb32389d3857bf7511d69beaafb76"></a><!-- doxytag: member="tbb::task::affinity_id" ref="d61bb32389d3857bf7511d69beaafb76" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef internal::affinity_id <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task::affinity_id</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-An id as used for specifying affinity. 
-<p>
-Guaranteed to be integral type. Value of 0 means no affinity. 
-</div>
-</div><p>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="4a3c415562d17905390ea5b49d12293e"></a><!-- doxytag: member="tbb::task::state_type" ref="4a3c415562d17905390ea5b49d12293e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task::state_type</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Enumeration of task states that the scheduler considers. 
-<p>
-<dl compact><dt><b>Enumerator: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><!-- doxytag: member="executing" ref="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9" args="" -->executing</em> </td><td>
-task is running, and will be destroyed after method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> completes. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><!-- doxytag: member="reexecute" ref="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513" args="" -->reexecute</em> </td><td>
-task to be rescheduled. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><!-- doxytag: member="ready" ref="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a" args="" -->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="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><!-- doxytag: member="allocated" ref="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c" args="" -->allocated</em> </td><td>
-task object is freshly allocated or recycled. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><!-- doxytag: member="freed" ref="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735" args="" -->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="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><!-- doxytag: member="recycle" ref="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d" args="" -->recycle</em> </td><td>
-task to be recycled as continuation </td></tr>
-</table>
-</dl>
-
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="43bfe64c0e9333c0ca895cc0c375512b"></a><!-- doxytag: member="tbb::task::allocate_additional_child_of" ref="43bfe64c0e9333c0ca895cc0c375512b" args="(task &t)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">internal::allocate_additional_child_of_proxy tbb::task::allocate_additional_child_of           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00166.html">task</a> & </td>
-          <td class="paramname"> <em>t</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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() 
-</div>
-</div><p>
-<a class="anchor" name="1434c79a5138993269d034008bff7329"></a><!-- doxytag: member="tbb::task::allocate_continuation" ref="1434c79a5138993269d034008bff7329" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">internal::allocate_continuation_proxy& tbb::task::allocate_continuation           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Returns proxy for overloaded new that allocates a continuation task of *this. 
-<p>
-The continuation's parent becomes the parent of *this. 
-</div>
-</div><p>
-<a class="anchor" name="0f3fb4aac549ab642022450a4bd13326"></a><!-- doxytag: member="tbb::task::cancel_group_execution" ref="0f3fb4aac549ab642022450a4bd13326" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::task::cancel_group_execution           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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>
-
-</div>
-</div><p>
-<a class="anchor" name="ef4680f5c148020c5e7e43ddef44cd5d"></a><!-- doxytag: member="tbb::task::decrement_ref_count" ref="ef4680f5c148020c5e7e43ddef44cd5d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int tbb::task::decrement_ref_count           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Atomically decrement reference count. 
-<p>
-Has release semanics. 
-</div>
-</div><p>
-<a class="anchor" name="a57def00c8e9d932dbea0b3ee23991b9"></a><!-- doxytag: member="tbb::task::destroy" ref="a57def00c8e9d932dbea0b3ee23991b9" args="(task &victim)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task::destroy           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00166.html">task</a> & </td>
-          <td class="paramname"> <em>victim</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Destroy a task. 
-<p>
-Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">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. 
-</div>
-</div><p>
-<a class="anchor" name="f5fb43c7ad0de5a4b95703cebc39e345"></a><!-- doxytag: member="tbb::task::increment_ref_count" ref="f5fb43c7ad0de5a4b95703cebc39e345" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::increment_ref_count           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Atomically increment reference count. 
-<p>
-Has acquire semantics 
-</div>
-</div><p>
-<a class="anchor" name="713c338c8eeaebdc5a6b10a69c039b06"></a><!-- doxytag: member="tbb::task::note_affinity" ref="713c338c8eeaebdc5a6b10a69c039b06" args="(affinity_id id)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td>
-          <td class="paramname"> <em>id</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Invoked by scheduler to notify task that it ran on unexpected thread. 
-<p>
-Invoked before method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
-The default action does nothing. 
-</div>
-</div><p>
-<a class="anchor" name="a67a79e18f62b43a623a00cfbd76db4c"></a><!-- doxytag: member="tbb::task::recycle_as_continuation" ref="a67a79e18f62b43a623a00cfbd76db4c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::recycle_as_continuation           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">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. 
-</div>
-</div><p>
-<a class="anchor" name="3b290d14109704e2b69dc1ac980a7a76"></a><!-- doxytag: member="tbb::task::recycle_as_safe_continuation" ref="3b290d14109704e2b69dc1ac980a7a76" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::recycle_as_safe_continuation           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Recommended to use, safe variant of recycle_as_continuation. 
-<p>
-For safety, it requires additional increment of ref_count. 
-</div>
-</div><p>
-<a class="anchor" name="4f1be9bbcdb487830dbe298b68d85144"></a><!-- doxytag: member="tbb::task::recycle_to_reexecute" ref="4f1be9bbcdb487830dbe298b68d85144" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::recycle_to_reexecute           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Schedule this for reexecution after current <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. 
-<p>
-Requires that this.execute() be running. 
-</div>
-</div><p>
-<a class="anchor" name="f7737143d458f1ed1c0d7da3971d9e6b"></a><!-- doxytag: member="tbb::task::spawn" ref="f7737143d458f1ed1c0d7da3971d9e6b" args="(task &child)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::spawn           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00166.html">task</a> & </td>
-          <td class="paramname"> <em>child</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Schedule task for execution when a worker becomes available. 
-<p>
-After all children spawned so far finish their method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">task::execute</a>, their parent's method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">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. 
-</div>
-</div><p>
-<a class="anchor" name="c33c7edbaec67aa8a56f48986a9dc69f"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="c33c7edbaec67aa8a56f48986a9dc69f" args="(task_list &root_list)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::spawn_root_and_wait           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00168.html">task_list</a> & </td>
-          <td class="paramname"> <em>root_list</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Spawn root tasks on list and wait for all of them to finish. 
-<p>
-If there are more tasks than worker threads, the tasks are spawned in order of front to back. 
-</div>
-</div><p>
-<a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &root)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void tbb::task::spawn_root_and_wait           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00166.html">task</a> & </td>
-          <td class="paramname"> <em>root</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="53d2615ad9c38859b4c8080936600283"></a><!-- doxytag: member="tbb::task::wait_for_all" ref="53d2615ad9c38859b4c8080936600283" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::task::wait_for_all           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename T><br>
+ class tbb::scalable_allocator< T ></h3>
 
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
 <p>
-Wait for reference count to become one, and set reference count to zero. 
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
-Works on tasks while waiting. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00354.html">task.h</a></ul>
+<li><a class="el" href="a00364.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00167.html b/doc/html/a00167.html
index c2b33fc..8522e82 100644
--- a/doc/html/a00167.html
+++ b/doc/html/a00167.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::scalable_allocator< void > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,209 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00167.html">task_group_context</a></div>
-<h1>tbb::task_group_context Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00167.html">scalable_allocator< void ></a></div>
+<h1>tbb::scalable_allocator< void > Class Template Reference<br>
 <small>
-[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_group_context" -->Used to form groups of tasks.  
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::scalable_allocator< void >" -->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="a00354.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00364.html">scalable_allocator.h</a>></code>
 <p>
-<a href="a00061.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4"></a><!-- doxytag: member="tbb::task_group_context::isolated" ref="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>isolated</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2046816029c2c7856f7684aed2af9cff"></a><!-- doxytag: member="tbb::scalable_allocator< void >::pointer" ref="2046816029c2c7856f7684aed2af9cff" args="" -->
+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="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b"></a><!-- doxytag: member="tbb::task_group_context::bound" ref="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>bound</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591c568d23f8aadf6ea8d1dc939c4e75"></a><!-- doxytag: member="tbb::scalable_allocator< void >::const_pointer" ref="591c568d23f8aadf6ea8d1dc939c4e75" args="" -->
+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="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c"></a><!-- doxytag: member="tbb::task_group_context::exact_exception" ref="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>exact_exception</b> = 0x0001ul << traits_offset</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64dbab666af0740c30b77edac9f157ce"></a><!-- doxytag: member="tbb::scalable_allocator< void >::value_type" ref="64dbab666af0740c30b77edac9f157ce" args="" -->
+typedef void </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="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38"></a><!-- doxytag: member="tbb::task_group_context::no_cancellation" ref="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>no_cancellation</b> = 0x0002ul << traits_offset</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce"></a><!-- doxytag: member="tbb::task_group_context::concurrent_wait" ref="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>concurrent_wait</b> = 0x0004ul << traits_offset</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><b>default_traits</b></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 class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>traits_type</b> { <b>exact_exception</b> =  0x0001ul << traits_offset, 
-<b>no_cancellation</b> =  0x0002ul << traits_offset, 
-<b>concurrent_wait</b> =  0x0004ul << traits_offset, 
-<b>default_traits</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="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> (kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default & binding constructor.  <a href="#19fee08fb8ac98adccfe69c1aa63c491"></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="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forcefully reinitializes the context after the task tree it was associated with is completed.  <a href="#6d30d16bf1cd22f86c6afaf29c2b430c"></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="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">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="#8bcdfdf4e6bfb76125b6de15c00b571d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4db72f16210b0a991b2c134d6763a4cc"></a><!-- doxytag: member="tbb::task_group_context::is_group_execution_cancelled" ref="4db72f16210b0a991b2c134d6763a4cc" args="() const " -->
-bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">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 class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Records the pending exception, and cancels the task group.  <a href="#d97c8a03615594b71b4ef06ff75cf561"></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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Out-of-line part of the constructor.  <a href="#49a55352084fd44b8863d182e839e6dc"></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="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_group_context::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
-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="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task_group_context::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></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>rebind</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="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root()</a> method. See <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">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>
-IMPLEMENTATION NOTE: When adding new members to <a class="el" href="a00167.html">task_group_context</a> or changing types of existing ones, update the size of both padding buffers (_leading_padding and _trailing_padding) appropriately. See also VERSIONING NOTE at the constructor definition below. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="19fee08fb8ac98adccfe69c1aa63c491"></a><!-- doxytag: member="tbb::task_group_context::task_group_context" ref="19fee08fb8ac98adccfe69c1aa63c491" args="(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::task_group_context::task_group_context           </td>
-          <td>(</td>
-          <td class="paramtype">kind_type </td>
-          <td class="paramname"> <em>relation_with_parent</em> = <code>bound</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">uintptr_t </td>
-          <td class="paramname"> <em>traits</em> = <code>default_traits</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<><br>
+ class tbb::scalable_allocator< void ></h3>
 
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <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 contexts involve much less overhead, but they have limited utility. Normally when an exception occurs in an algorithm that has nested ones running, it is desirably to have all the nested algorithms canceled as well. Such a 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.<p>
-VERSIONING NOTE: Implementation(s) of <a class="el" href="a00167.html">task_group_context</a> constructor(s) cannot be made entirely out-of-line because the run-time version must be set by the user code. This will become critically important for binary compatibility, if we ever have to change the size of the context object.<p>
-Boosting the runtime version will also be necessary whenever new fields are introduced in the currently unused padding areas or the meaning of the existing fields is changed or extended. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="8bcdfdf4e6bfb76125b6de15c00b571d"></a><!-- doxytag: member="tbb::task_group_context::cancel_group_execution" ref="8bcdfdf4e6bfb76125b6de15c00b571d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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 concurrently called on the same not yet cancelled context, true will be returned by one and only one invocation. 
-</div>
-</div><p>
-<a class="anchor" name="49a55352084fd44b8863d182e839e6dc"></a><!-- doxytag: member="tbb::task_group_context::init" ref="49a55352084fd44b8863d182e839e6dc" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::init           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [protected]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Out-of-line part of the constructor. 
-<p>
-Singled out to ensure backward binary compatibility of the future versions. 
-</div>
-</div><p>
-<a class="anchor" name="d97c8a03615594b71b4ef06ff75cf561"></a><!-- doxytag: member="tbb::task_group_context::register_pending_exception" ref="d97c8a03615594b71b4ef06ff75cf561" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::register_pending_exception           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Records the pending exception, and cancels the task group. 
-<p>
-May be called only from inside a catch-block. If the context is already canceled, does nothing. The method brings the task group associated with this context exactly into the state it would be in, if one of its tasks threw the currently pending exception during its execution. In other words, it emulates the actions of the scheduler's dispatch loop exception handler. 
-</div>
-</div><p>
-<a class="anchor" name="6d30d16bf1cd22f86c6afaf29c2b430c"></a><!-- doxytag: member="tbb::task_group_context::reset" ref="6d30d16bf1cd22f86c6afaf29c2b430c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Forcefully reinitializes the context after the task tree it was associated with is completed. 
-<p>
-Because the method assumes that all the tasks that used to be associated with this context have already finished, calling it while the context is still in use somewhere in the task hierarchy leads to undefined behavior.<p>
-IMPORTANT: This method is not thread safe!<p>
-The method does not change the context's parent if it is set. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00354.html">task.h</a></ul>
+<li><a class="el" href="a00364.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00168.html b/doc/html/a00168.html
index ed734cf..cff0ef7 100644
--- a/doc/html/a00168.html
+++ b/doc/html/a00168.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::simple_partitioner Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,54 +21,38 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00168.html">task_list</a></div>
-<h1>tbb::task_list Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00168.html">simple_partitioner</a></div>
+<h1>tbb::simple_partitioner Class Reference<br>
 <small>
-[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_list" -->A list of children.  
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::simple_partitioner" -->A simple partitioner.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00354.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00355.html">partitioner.h</a>></code>
 <p>
-<a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00040.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="416341c2047eaef50417b41eaf7e9de6"></a><!-- doxytag: member="tbb::task_list::task_list" ref="416341c2047eaef50417b41eaf7e9de6" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">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="6d438f1499a02db1e59c24ab6043e5ba"></a><!-- doxytag: member="tbb::task_list::~task_list" ref="6d438f1499a02db1e59c24ab6043e5ba" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">~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="f3ac31e092814b90929f81bb30441959"></a><!-- doxytag: member="tbb::task_list::empty" ref="f3ac31e092814b90929f81bb30441959" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">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="4cd34756bc4763dafb8c84838a0124ff"></a><!-- doxytag: member="tbb::task_list::push_back" ref="4cd34756bc4763dafb8c84838a0124ff" args="(task &task)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00166.html">task</a> &<a class="el" href="a00166.html">task</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="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></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="5fe85df5ed524418389d34051750347d"></a><!-- doxytag: member="tbb::task_list::pop_front" ref="5fe85df5ed524418389d34051750347d" args="()" -->
-<a class="el" href="a00166.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">pop_front</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></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="fce446ee13e025969945328f3ff59b95"></a><!-- doxytag: member="tbb::task_list::clear" ref="fce446ee13e025969945328f3ff59b95" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></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="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_list::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>task</b></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"><b>partition_type</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A list of children. 
+A simple partitioner. 
 <p>
-Used for method task::spawn_children 
+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="a00354.html">task.h</a></ul>
+<li><a class="el" href="a00355.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
index 628efdf..1b2209a 100644
--- a/doc/html/a00169.html
+++ b/doc/html/a00169.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::spin_mutex Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,138 +21,105 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00169.html">task_scheduler_init</a></div>
-<h1>tbb::task_scheduler_init Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00169.html">spin_mutex</a></div>
+<h1>tbb::spin_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class representing reference to tbb scheduler.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::spin_mutex" -->A lock that occupies a single byte.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00371.html">task_scheduler_init.h</a>></code>
+<code>#include <<a class="el" href="a00365.html">spin_mutex.h</a>></code>
 <p>
-<a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00058.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 __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread.  <a href="#d476053cc712e572554823492a5229ce"></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="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock.  <a href="#3d8fb44644fd8d41ada1fbeba7409be3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b3fa21632815f8fab2fd6c67ec0d48c"></a><!-- doxytag: member="tbb::spin_mutex::internal_construct" ref="4b3fa21632815f8fab2fd6c67ec0d48c" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#d5ed214a8bb53b0466ed91ff4734b9a3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f73257e04cb7fb9bd5be2b635d9016f1"></a><!-- doxytag: member="tbb::task_scheduler_init::terminate" ref="f73257e04cb7fb9bd5be2b635d9016f1" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f748989e19b6045e3a2d2ee73626a28"></a><!-- doxytag: member="tbb::spin_mutex::lock" ref="4f748989e19b6045e3a2d2ee73626a28" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">lock</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="421600bf9bf9338bcf937063f2ff0e90"></a><!-- doxytag: member="tbb::task_scheduler_init::task_scheduler_init" ref="421600bf9bf9338bcf937063f2ff0e90" args="(int number_of_threads=automatic, stack_size_type thread_stack_size=0)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <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#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a> ()</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="4da6c86292d80c703a66c1f6f5299488"></a><!-- doxytag: member="tbb::task_scheduler_init::~task_scheduler_init" ref="4da6c86292d80c703a66c1f6f5299488" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e843ee6265f57f27d228ba91e7308ef"></a><!-- doxytag: member="tbb::spin_mutex::unlock" ref="0e843ee6265f57f27d228ba91e7308ef" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">unlock</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="12752282977029f23416642bc03e8b74"></a><!-- doxytag: member="tbb::task_scheduler_init::is_active" ref="12752282977029f23416642bc03e8b74" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <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="5a7c93ca9e7ab656037a43984f24c051"></a><!-- doxytag: member="tbb::spin_mutex::is_rw_mutex" ref="5a7c93ca9e7ab656037a43984f24c051" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</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">static int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a967c455d0d80c9bbe030905201391b6"></a><!-- doxytag: member="tbb::spin_mutex::is_recursive_mutex" ref="a967c455d0d80c9bbe030905201391b6" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</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="#ba00714c33a41a3c2216f48613971cab"></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="8f5988e2b0fbb2d533fcbb7f2583743f"></a><!-- doxytag: member="tbb::task_scheduler_init::automatic" ref="8f5988e2b0fbb2d533fcbb7f2583743f" args="" -->
-static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ec12e4036073fb684b6d2d33493ed0aa"></a><!-- doxytag: member="tbb::spin_mutex::is_fair_mutex" ref="ec12e4036073fb684b6d2d33493ed0aa" args="" -->
+static 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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></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="e6c860f1e559026ff3ef4599c0d6c514"></a><!-- doxytag: member="tbb::task_scheduler_init::deferred" ref="e6c860f1e559026ff3ef4599c0d6c514" args="" -->
-static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</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="a00170.html">scoped_lock</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00170.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Class representing reference to tbb scheduler. 
+A lock that occupies a single byte. 
 <p>
-A thread must construct a <a class="el" href="a00169.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task. 
+A <a class="el" href="a00169.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>Member Function Documentation</h2>
-<a class="anchor" name="ba00714c33a41a3c2216f48613971cab"></a><!-- doxytag: member="tbb::task_scheduler_init::default_num_threads" ref="ba00714c33a41a3c2216f48613971cab" args="()" -->
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="3d8fb44644fd8d41ada1fbeba7409be3"></a><!-- doxytag: member="tbb::spin_mutex::spin_mutex" ref="3d8fb44644fd8d41ada1fbeba7409be3" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads           </td>
+          <td class="memname">tbb::spin_mutex::spin_mutex           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="d5ed214a8bb53b0466ed91ff4734b9a3"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d5ed214a8bb53b0466ed91ff4734b9a3" args="(int number_of_threads, stack_size_type thread_stack_size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>number_of_threads</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">stack_size_type </td>
-          <td class="paramname"> <em>thread_stack_size</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-The overloaded method with stack size parameter. 
+Construct unacquired lock. 
 <p>
-Overloading is necessary to preserve ABI compatibility 
+Equivalent to zero-initialization of *this. 
 </div>
 </div><p>
-<a class="anchor" name="d476053cc712e572554823492a5229ce"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d476053cc712e572554823492a5229ce" args="(int number_of_threads=automatic)" -->
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><!-- doxytag: member="tbb::spin_mutex::try_lock" ref="8f9a58fb56a2b4c5efe1a7f7c1ae2074" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
+          <td class="memname">bool tbb::spin_mutex::try_lock           </td>
           <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>number_of_threads</em> = <code><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></code>          </td>
+          <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Ensure that scheduler exists for this thread. 
+Try acquiring lock (non-blocking). 
 <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. 
+Return true if lock acquired; false otherwise. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00371.html">task_scheduler_init.h</a></ul>
+<li><a class="el" href="a00365.html">spin_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
index b4f5b8a..c2075d3 100644
--- a/doc/html/a00170.html
+++ b/doc/html/a00170.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::spin_mutex::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,104 +21,71 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00170.html">tbb_allocator</a></div>
-<h1>tbb::tbb_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::tbb_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00169.html">spin_mutex</a>::<a class="el" href="a00170.html">scoped_lock</a></div>
+<h1>tbb::spin_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_mutex::scoped_lock" -->Represents acquisition of a mutex.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00365.html">spin_mutex.h</a>></code>
 <p>
-<a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00059.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="3cdd9619bc0a802763e7823068f83a4c"></a><!-- doxytag: member="tbb::tbb_allocator::value_type" ref="3cdd9619bc0a802763e7823068f83a4c" args="" -->
-typedef internal::allocator_type<<br>
- T >::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="f979d0e74d7c6e5aeb0d26408776a9e1"></a><!-- doxytag: member="tbb::tbb_allocator::pointer" ref="f979d0e74d7c6e5aeb0d26408776a9e1" args="" -->
-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="1622504886ef265016a5821d61bf7adc"></a><!-- doxytag: member="tbb::tbb_allocator::const_pointer" ref="1622504886ef265016a5821d61bf7adc" args="" -->
-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="b8e58d23c5c98fd65d4432c1e324f4c0"></a><!-- doxytag: member="tbb::tbb_allocator::reference" ref="b8e58d23c5c98fd65d4432c1e324f4c0" args="" -->
-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="532f36f99650b1c26a2b8899383c5411"></a><!-- doxytag: member="tbb::tbb_allocator::const_reference" ref="532f36f99650b1c26a2b8899383c5411" args="" -->
-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="639df0fb169cfcb94ba1b12429b736f4"></a><!-- doxytag: member="tbb::tbb_allocator::size_type" ref="639df0fb169cfcb94ba1b12429b736f4" args="" -->
-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="54828b5d0b937d608f76650a5df0e39f"></a><!-- doxytag: member="tbb::tbb_allocator::difference_type" ref="54828b5d0b937d608f76650a5df0e39f" args="" -->
-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="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5"></a><!-- doxytag: member="tbb::tbb_allocator::scalable" ref="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>scalable</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf"></a><!-- doxytag: member="tbb::tbb_allocator::standard" ref="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>standard</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">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="d85cd071047b52eeb207d458d54098cc"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="d85cd071047b52eeb207d458d54098cc" args="(const tbb_allocator &)" -->
- </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00170.html">tbb_allocator</a> &)  throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5c3cb04a50d15d38f4c66ca3e5d2f6af"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="5c3cb04a50d15d38f4c66ca3e5d2f6af" args="(const tbb_allocator< U > &)" -->
-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="a00170.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="08d3822344271d0a1c2e64e8c9c16b58"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="08d3822344271d0a1c2e64e8c9c16b58" args="(reference x) const " -->
-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="29ae680ae7f5e685c2e15535b9c855b3"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="29ae680ae7f5e685c2e15535b9c855b3" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b388f25858f783d995d61506de24656"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="2b388f25858f783d995d61506de24656" args="(const_reference x) const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </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="5ce6807050a9e8f87bcb4a65dccb12ef"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="5ce6807050a9e8f87bcb4a65dccb12ef" args="(spin_mutex &m)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00169.html">spin_mutex</a> &m)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6cb487b1bdce0b581f265a77dca6d53"></a><!-- doxytag: member="tbb::tbb_allocator::allocate" ref="f6cb487b1bdce0b581f265a77dca6d53" args="(size_type n, const void *=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</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="3ee3c338732b1f64b0b32a757807a30d"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::acquire" ref="3ee3c338732b1f64b0b32a757807a30d" args="(spin_mutex &m)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00169.html">spin_mutex</a> &m)</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="fdd011fdf2f9ad07006dc7c0a7ec1da2"></a><!-- doxytag: member="tbb::tbb_allocator::deallocate" ref="fdd011fdf2f9ad07006dc7c0a7ec1da2" args="(pointer p, size_type)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00169.html">spin_mutex</a> &m)</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="f059ca2c96243024f0d562ee3a87a3a5"></a><!-- doxytag: member="tbb::tbb_allocator::max_size" ref="f059ca2c96243024f0d562ee3a87a3a5" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#9297ec188534b45dc0ca48f2f39a0501"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eeb615e68e963e6bf8d9c11402d0ce8e"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::release" ref="eeb615e68e963e6bf8d9c11402d0ce8e" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a> ()</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="ab228ab9e324ed041c2226e1d717df5f"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="ab228ab9e324ed041c2226e1d717df5f" args="(pointer p, const value_type &value)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &value)</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="ac6fa425d1f06c56d8b70abc51aac844"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::~scoped_lock" ref="ac6fa425d1f06c56d8b70abc51aac844" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a> ()</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="ef133522bf55f05a605bee0763208281"></a><!-- doxytag: member="tbb::tbb_allocator::destroy" ref="ef133522bf55f05a605bee0763208281" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">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="78701e7454ef8e1a25b5acd364367080"></a><!-- doxytag: member="tbb::tbb_allocator::allocator_type" ref="78701e7454ef8e1a25b5acd364367080" args="()" -->
-static <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></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>rebind</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <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="6ee2a2cdaf6a2128849e7d7723d9174f"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::spin_mutex" ref="6ee2a2cdaf6a2128849e7d7723d9174f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::tbb_allocator< T ></h3>
+Represents acquisition of a mutex. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="9297ec188534b45dc0ca48f2f39a0501"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::try_acquire" ref="9297ec188534b45dc0ca48f2f39a0501" args="(spin_mutex &m)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_mutex::scoped_lock::try_acquire           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00169.html">spin_mutex</a> & </td>
+          <td class="paramname"> <em>m</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-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. 
+Try acquiring lock (non-blocking). 
 <p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00365.html">spin_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00171.html b/doc/html/a00171.html
index e8203a3..9116dee 100644
--- a/doc/html/a00171.html
+++ b/doc/html/a00171.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::spin_rw_mutex_v3 Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,107 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00171.html">tbb_allocator< void ></a></div>
-<h1>tbb::tbb_allocator< void > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00171.html">spin_rw_mutex_v3</a></div>
+<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::tbb_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+[<a class="el" href="a00244.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3" -->Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00366.html">spin_rw_mutex.h</a>></code>
 <p>
-<a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00060.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="05f5ff584890407c8d672e4b4378744d"></a><!-- doxytag: member="tbb::tbb_allocator< void >::pointer" ref="05f5ff584890407c8d672e4b4378744d" args="" -->
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</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="61332b2756de89f3f5f69310cbb6e70c"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::spin_rw_mutex_v3" ref="61332b2756de89f3f5f69310cbb6e70c" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33e64ba71f06ef24a5093415185e66cb"></a><!-- doxytag: member="tbb::tbb_allocator< void >::const_pointer" ref="33e64ba71f06ef24a5093415185e66cb" args="" -->
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></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="9a815fb2759e55072ed413f1b6970cf3"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::~spin_rw_mutex_v3" ref="9a815fb2759e55072ed413f1b6970cf3" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81595a776b9d206a92caa526cad9c637"></a><!-- doxytag: member="tbb::tbb_allocator< void >::value_type" ref="81595a776b9d206a92caa526cad9c637" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4007d6e1523dbc3c2bb7f889ab789a8a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock" ref="4007d6e1523dbc3c2bb7f889ab789a8a" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire writer lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#088bb256be794cc47d3b83791632fdfc">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring writer lock (non-blocking).  <a href="#088bb256be794cc47d3b83791632fdfc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9f52ead2098eb5fb12da59d5ae53b55"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::unlock" ref="f9f52ead2098eb5fb12da59d5ae53b55" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</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="13f799708ac4ca437a16be202e263e18"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock_read" ref="13f799708ac4ca437a16be202e263e18" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#13f799708ac4ca437a16be202e263e18">lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire reader lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#b8667415869013f840d976aa406d385a">try_lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring reader lock (non-blocking).  <a href="#b8667415869013f840d976aa406d385a"></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="4c1e60f22c01604ca93c41b8334cc15e"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_rw_mutex" ref="4c1e60f22c01604ca93c41b8334cc15e" args="" -->
+static 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="681a816fe76d6ca7752303f9dcc3c4b2"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_recursive_mutex" ref="681a816fe76d6ca7752303f9dcc3c4b2" args="" -->
+static 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="4dd66d90df6247da6050e88b2aa3b820"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_fair_mutex" ref="4dd66d90df6247da6050e88b2aa3b820" args="" -->
+static const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</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>rebind</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">scoped_lock</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00172.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::tbb_allocator< void ></h3>
+Fast, unfair, spinning reader-writer lock with backoff and writer-preference. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="088bb256be794cc47d3b83791632fdfc"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock" ref="088bb256be794cc47d3b83791632fdfc" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring writer lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="b8667415869013f840d976aa406d385a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock_read" ref="b8667415869013f840d976aa406d385a" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock_read           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
+Try acquiring reader lock (non-blocking). 
+<p>
+Return true if reader lock acquired; false otherwise. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00366.html">spin_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00172.html b/doc/html/a00172.html
index 4f96dc1..b4c98ba 100644
--- a/doc/html/a00172.html
+++ b/doc/html/a00172.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,138 +21,127 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00172.html">tbb_exception</a></div>
-<h1>tbb::tbb_exception Class Reference</h1><!-- doxytag: class="tbb::tbb_exception" -->Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00171.html">spin_rw_mutex_v3</a>::<a class="el" href="a00172.html">scoped_lock</a></div>
+<h1>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3::scoped_lock" -->The scoped locking pattern.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00366.html">spin_rw_mutex.h</a>></code>
 <p>
-Inherited by <a class="el" href="a00127.html">tbb::captured_exception</a>, and <a class="el" href="a00141.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="a00084.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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">virtual <a class="el" href="a00172.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> ()=0  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#d6ea60dee5563f702379bf5e51aa8806"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00171.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#3e3482bf264d4ca4dde046cd9c02c766"></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="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> ()=0  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex.  <a href="#42a92d4f8fdde425b111cfa8a9228071"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d7eaaa3f2e2c5dc11e7005811b1bdd04"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::~scoped_lock" ref="d7eaaa3f2e2c5dc11e7005811b1bdd04" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> method.  <a href="#66c94938eca8bf88b76f3eccaaf215d8"></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="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> ()=0</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="b0b646ec5be02a127d159bbb7ca65353"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::acquire" ref="b0b646ec5be02a127d159bbb7ca65353" args="(spin_rw_mutex &m, bool write=true)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00171.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#8588e07fa49692f4d734e4f2e4f048f4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d00f6497e552fee978a02bfcbebf46e2"></a><!-- doxytag: member="tbb::tbb_exception::name" ref="d00f6497e552fee978a02bfcbebf46e2" args="() const =0" -->
-virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a> () const =0  throw ()</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="a00172.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a> ()</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="e8157689ecb66bc6c72d3618bf3cc371"></a><!-- doxytag: member="tbb::tbb_exception::what" ref="e8157689ecb66bc6c72d3618bf3cc371" args="() const =0" -->
-virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a> () const =0  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#3f0b1e3f2efab63336400348bd070226"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="61b14d00a78185c9b2d206ebfc379124"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::release" ref="61b14d00a78185c9b2d206ebfc379124" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#61b14d00a78185c9b2d206ebfc379124">release</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what()</a> method. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a> (void *p)</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="c2c2c38a08cb9080e87099fac3e5bc94"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::downgrade_to_reader" ref="c2c2c38a08cb9080e87099fac3e5bc94" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#c2c2c38a08cb9080e87099fac3e5bc94">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="9879626968d9b9a04cd2ec0fb2e84ae1"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::try_acquire" ref="9879626968d9b9a04cd2ec0fb2e84ae1" args="(spin_rw_mutex &m, bool write=true)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00171.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>
-Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. 
+The scoped locking pattern. 
 <p>
-If an unhandled exception of the type derived from <a class="el" href="a00172.html">tbb::tbb_exception</a> 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="a00167.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="a00127.html">tbb::captured_exception</a> and template class <a class="el" href="a00141.html">tbb::movable_exception</a>. See their declarations for more info. 
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
 <p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="66c94938eca8bf88b76f3eccaaf215d8"></a><!-- doxytag: member="tbb::tbb_exception::destroy" ref="66c94938eca8bf88b76f3eccaaf215d8" args="()=0" -->
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="d6ea60dee5563f702379bf5e51aa8806"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="d6ea60dee5563f702379bf5e51aa8806" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">virtual void tbb::tbb_exception::destroy           </td>
+          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Destroys objects created by the <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">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. 
+Construct lock that has not acquired a mutex. 
 <p>
-Implemented in <a class="el" href="a00127.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>.
+Equivalent to zero-initialization of *this. 
 </div>
 </div><p>
-<a class="anchor" name="3e3482bf264d4ca4dde046cd9c02c766"></a><!-- doxytag: member="tbb::tbb_exception::move" ref="3e3482bf264d4ca4dde046cd9c02c766" args="()=0" -->
+<a class="anchor" name="42a92d4f8fdde425b111cfa8a9228071"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="42a92d4f8fdde425b111cfa8a9228071" args="(spin_rw_mutex &m, bool write=true)" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">virtual <a class="el" href="a00172.html">tbb_exception</a>* tbb::tbb_exception::move           </td>
+          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
           <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+          <td class="paramtype"><a class="el" href="a00171.html">spin_rw_mutex</a> & </td>
+          <td class="paramname"> <em>m</em>, </td>
         </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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="a00127.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>.
-</div>
-</div><p>
-<a class="anchor" name="3f2da7f3d8a6e4c1df522af1213afb5a"></a><!-- doxytag: member="tbb::tbb_exception::operator delete" ref="3f2da7f3d8a6e4c1df522af1213afb5a" args="(void *p)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
         <tr>
-          <td class="memname">void tbb::tbb_exception::operator delete           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>p</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool </td>
+          <td class="paramname"> <em>write</em> = <code>true</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
-When overriding method <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. 
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
 </div>
 </div><p>
-<a class="anchor" name="8588e07fa49692f4d734e4f2e4f048f4"></a><!-- doxytag: member="tbb::tbb_exception::throw_self" ref="8588e07fa49692f4d734e4f2e4f048f4" args="()=0" -->
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="3f0b1e3f2efab63336400348bd070226"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer" ref="3f0b1e3f2efab63336400348bd070226" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">virtual void tbb::tbb_exception::throw_self           </td>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"><code> [pure virtual]</code></td>
+          <td width="100%"><code> [inline]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <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. 
+Upgrade reader to become a writer. 
 <p>
-Implemented in <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>.
+Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00366.html">spin_rw_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00173.html b/doc/html/a00173.html
index d10e484..7d632d9 100644
--- a/doc/html/a00173.html
+++ b/doc/html/a00173.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_exception_ptr Class Reference</title>
+<title>tbb::split Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,63 +21,25 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00173.html">tbb_exception_ptr</a></div>
-<h1>tbb::internal::tbb_exception_ptr Class Reference</h1><!-- doxytag: class="tbb::internal::tbb_exception_ptr" -->Exception container that preserves the exact copy of the original exception.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00173.html">split</a></div>
+<h1>tbb::split Class Reference<br>
+<small>
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::split" -->Dummy type that distinguishes splitting constructor from copy constructor.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00398.html">tbb_stddef.h</a>></code>
 <p>
-<a href="a00087.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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> ()  throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys this objects.  <a href="#921875bbacd2c8a5f324c7da7a415262"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="292832fd5c523e3d8081a22247840a1d"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::throw_self" ref="292832fd5c523e3d8081a22247840a1d" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws the contained exception . <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="65083750bebe799d3fe8143c794523bb"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="65083750bebe799d3fe8143c794523bb" args="()" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1111b00ba54b7fe35e6d3a0f21de287"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="d1111b00ba54b7fe35e6d3a0f21de287" args="(const tbb_exception &tag)" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00172.html">tbb_exception</a> &tag)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c35e5db8e9cdff5d1387db5b0bad2e4a"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="c35e5db8e9cdff5d1387db5b0bad2e4a" args="(captured_exception &src)" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00127.html">captured_exception</a> &src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">This overload uses move semantics (i.e. it empties src). <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception container that preserves the exact copy of the original exception. 
+Dummy type that distinguishes splitting constructor from copy constructor. 
 <p>
-This class can be used only when the appropriate runtime support (mandated by C++0x) is present 
+See description of parallel_for and parallel_reduce for example usages. 
 <p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="921875bbacd2c8a5f324c7da7a415262"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::destroy" ref="921875bbacd2c8a5f324c7da7a415262" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::internal::tbb_exception_ptr::destroy           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%">  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Destroys this objects. 
-<p>
-Note that objects of this type can be created only by the allocate() method. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00398.html">tbb_stddef.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00174.html b/doc/html/a00174.html
index bd3c473..e294cf8 100644
--- a/doc/html/a00174.html
+++ b/doc/html/a00174.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_hash_compare< T > Struct Template Reference</title>
+<title>tbb::task Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,30 +21,581 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00174.html">tbb_hash_compare</a></div>
-<h1>tbb::tbb_hash_compare< T > Struct Template Reference</h1><!-- doxytag: class="tbb::tbb_hash_compare" -->hash_compare - default argument  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00174.html">task</a></div>
+<h1>tbb::task Class Reference<br>
+<small>
+[<a class="el" href="a00246.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task" -->Base class for user-defined tasks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00272.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00367.html">task.h</a>></code>
 <p>
-<a href="a00012.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::task:
+<p><center><img src="a00174.png" usemap="#tbb::task_map" border="0" alt=""></center>
+<map name="tbb::task_map">
+<area href="a00142.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
+</map>
+<a href="a00064.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 internal::affinity_id </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity.  <a href="#d61bb32389d3857bf7511d69beaafb76"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task is running, and will be destroyed after method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> completes.  <a href="#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task to be rescheduled.  <a href="#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task is in ready pool, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task object is freshly allocated or recycled.  <a href="#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task object is on free list, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task to be recycled as continuation  <a href="#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
+  <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
+<a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
+<a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
+<a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
+<br>
+  <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
+<a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
+<br>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration of task states that the scheduler considers.  <a href="a00174.html#4a3c415562d17905390ea5b49d12293e">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="98245ee0473f84cb19dbbf8c81134908"></a><!-- doxytag: member="tbb::task::~task" ref="98245ee0473f84cb19dbbf8c81134908" args="()" -->
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">~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="22c298cd40937a431a06777423f002f6"></a><!-- doxytag: member="tbb::task::execute" ref="22c298cd40937a431a06777423f002f6" args="()=0" -->
+virtual <a class="el" href="a00174.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">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="a00174.html#1434c79a5138993269d034008bff7329">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="#1434c79a5138993269d034008bff7329"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ff794f7053cd9148d5f280fbf07377f"></a><!-- doxytag: member="tbb::task::allocate_child" ref="1ff794f7053cd9148d5f280fbf07377f" args="()" -->
+internal::allocate_child_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">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="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a> (<a class="el" href="a00174.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="#43bfe64c0e9333c0ca895cc0c375512b"></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="a00174.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a> (<a class="el" href="a00174.html">task</a> &victim)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task.  <a href="#a57def00c8e9d932dbea0b3ee23991b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">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="#a67a79e18f62b43a623a00cfbd76db4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">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="#3b290d14109704e2b69dc1ac980a7a76"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db399855177438bbc9cc61d508dae8d2"></a><!-- doxytag: member="tbb::task::recycle_as_child_of" ref="db399855177438bbc9cc61d508dae8d2" args="(task &new_parent)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00174.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="a00174.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> returns.  <a href="#4f1be9bbcdb487830dbe298b68d85144"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7653ceef53a188d05b5c779e1104b698"></a><!-- doxytag: member="tbb::task::depth" ref="7653ceef53a188d05b5c779e1104b698" args="() const " -->
+intptr_t </td><td class="memItemRight" valign="bottom"><b>depth</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e864e9c80e3d79f00d77fb99f4757621"></a><!-- doxytag: member="tbb::task::set_depth" ref="e864e9c80e3d79f00d77fb99f4757621" args="(intptr_t)" -->
+void </td><td class="memItemRight" valign="bottom"><b>set_depth</b> (intptr_t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c83fcc26f6513f0e06de70cbab9dee46"></a><!-- doxytag: member="tbb::task::add_to_depth" ref="c83fcc26f6513f0e06de70cbab9dee46" args="(int)" -->
+void </td><td class="memItemRight" valign="bottom"><b>add_to_depth</b> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06a4206a57e8e12a439b14d6d41cfd92"></a><!-- doxytag: member="tbb::task::set_ref_count" ref="06a4206a57e8e12a439b14d6d41cfd92" args="(int count)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">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="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically increment reference count.  <a href="#f5fb43c7ad0de5a4b95703cebc39e345"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically decrement reference count.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a> (<a class="el" href="a00174.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="#f7737143d458f1ed1c0d7da3971d9e6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db841c647eb6d754440c2f4e4a73c80b"></a><!-- doxytag: member="tbb::task::spawn" ref="db841c647eb6d754440c2f4e4a73c80b" args="(task_list &list)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a> (<a class="el" href="a00176.html">task_list</a> &list)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn multiple tasks and clear list. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ce28ca9baa771cfc37ecd72e69c4f3c"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="3ce28ca9baa771cfc37ecd72e69c4f3c" args="(task &child)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00174.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="894ab68378e502776d8220eea7ce9fa1"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="894ab68378e502776d8220eea7ce9fa1" args="(task_list &list)" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00176.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="a00174.html#53d2615ad9c38859b4c8080936600283">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="#53d2615ad9c38859b4c8080936600283"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="314e98ee4347ccec83efcb9ee22e8596"></a><!-- doxytag: member="tbb::task::parent" ref="314e98ee4347ccec83efcb9ee22e8596" args="() const " -->
+<a class="el" href="a00174.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">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="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
+<a class="el" href="a00175.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Shared context that is used to communicate asynchronous state changes. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9169402702f56bf519448aaf34450aa"></a><!-- doxytag: member="tbb::task::is_stolen_task" ref="f9169402702f56bf519448aaf34450aa" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#f9169402702f56bf519448aaf34450aa">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="0af7b2d7e6e8b4333b2accfce3dfb374"></a><!-- doxytag: member="tbb::task::state" ref="0af7b2d7e6e8b4333b2accfce3dfb374" args="() const " -->
+<a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">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="ad774f55eaec008ae02b236423209ced"></a><!-- doxytag: member="tbb::task::ref_count" ref="ad774f55eaec008ae02b236423209ced" args="() const " -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#ad774f55eaec008ae02b236423209ced">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="c26718b3b247cd13deb1a741902e7105"></a><!-- doxytag: member="tbb::task::is_owned_by_current_thread" ref="c26718b3b247cd13deb1a741902e7105" args="() const " -->
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Obsolete, and only retained for the sake of backward compatibility. Always returns true. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dca19d7a45487a7d67a0db517e2b57c9"></a><!-- doxytag: member="tbb::task::set_affinity" ref="dca19d7a45487a7d67a0db517e2b57c9" args="(affinity_id id)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">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="3a920a56b0bcf2801518fb45b2c9d2be"></a><!-- doxytag: member="tbb::task::affinity" ref="3a920a56b0bcf2801518fb45b2c9d2be" args="() const " -->
+<a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">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 __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">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="#713c338c8eeaebdc5a6b10a69c039b06"></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#0f3fb4aac549ab642022450a4bd13326">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="#0f3fb4aac549ab642022450a4bd13326"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="025f18118c057c4c8db87ff2ce8df975"></a><!-- doxytag: member="tbb::task::is_cancelled" ref="025f18118c057c4c8db87ff2ce8df975" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">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="4a1e6b9c8719d73dee49e64becf5aa37"></a><!-- doxytag: member="tbb::tbb_hash_compare::hash" ref="4a1e6b9c8719d73dee49e64becf5aa37" args="(const T &t)" -->
-static size_t </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="23acb0da0afd690da797f9f882027d34"></a><!-- doxytag: member="tbb::task::allocate_root" ref="23acb0da0afd690da797f9f882027d34" args="()" -->
+static internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#23acb0da0afd690da797f9f882027d34">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"><a class="anchor" name="8ccc518caf31075a3e073996d2d240a4"></a><!-- doxytag: member="tbb::task::allocate_root" ref="8ccc518caf31075a3e073996d2d240a4" args="(task_group_context &ctx)" -->
+static internal::allocate_root_with_context_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00175.html">task_group_context</a> &ctx)</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">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00174.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="#ce8ce689c26a4ddf343829bc3c73290a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00176.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="#c33c7edbaec67aa8a56f48986a9dc69f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd43e8d6249738efafd12d6a4c72c5e3"></a><!-- doxytag: member="tbb::task::self" ref="bd43e8d6249738efafd12d6a4c72c5e3" args="()" -->
+static <a class="el" href="a00174.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">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="2bce8ec6e44706e70128f5cf91b76e67"></a><!-- doxytag: member="tbb::task::task" ref="2bce8ec6e44706e70128f5cf91b76e67" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">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="5eabadbca46f93ce6fb08290e85a0a65"></a><!-- doxytag: member="tbb::task::task_list" ref="5eabadbca46f93ce6fb08290e85a0a65" args="" -->
+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="e296810002652d771f692e20ca87e898"></a><!-- doxytag: member="tbb::task::internal::scheduler" ref="e296810002652d771f692e20ca87e898" args="" -->
+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="387b945c106854e1ed525f0668092930"></a><!-- doxytag: member="tbb::task::internal::allocate_root_proxy" ref="387b945c106854e1ed525f0668092930" args="" -->
+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="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
+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="9987b3b1174772e5e853bd94b9f15350"></a><!-- doxytag: member="tbb::task::internal::allocate_continuation_proxy" ref="9987b3b1174772e5e853bd94b9f15350" args="" -->
+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="1f9e255654086b52fe107e4d8bbc8b7d"></a><!-- doxytag: member="tbb::task::internal::allocate_child_proxy" ref="1f9e255654086b52fe107e4d8bbc8b7d" args="" -->
+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="553e13ec26df66be906c01cc4c39ed88"></a><!-- doxytag: member="tbb::tbb_hash_compare::equal" ref="553e13ec26df66be906c01cc4c39ed88" args="(const T &a, const T &b)" -->
-static bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (const T &a, const T &b)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e99ce0045ea3c55d239f38ea026b8a7"></a><!-- doxytag: member="tbb::task::internal::allocate_additional_child_of_proxy" ref="0e99ce0045ea3c55d239f38ea026b8a7" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc65e26bdbb61f5e5a3d7ac92948bbd1"></a><!-- doxytag: member="tbb::task::internal::task_group_base" ref="bc65e26bdbb61f5e5a3d7ac92948bbd1" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::task_group_base</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- struct tbb::tbb_hash_compare< T ></h3>
+Base class for user-defined tasks. 
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="d61bb32389d3857bf7511d69beaafb76"></a><!-- doxytag: member="tbb::task::affinity_id" ref="d61bb32389d3857bf7511d69beaafb76" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef internal::affinity_id <a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">tbb::task::affinity_id</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+An id as used for specifying affinity. 
+<p>
+Guaranteed to be integral type. Value of 0 means no affinity. 
+</div>
+</div><p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="4a3c415562d17905390ea5b49d12293e"></a><!-- doxytag: member="tbb::task::state_type" ref="4a3c415562d17905390ea5b49d12293e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">tbb::task::state_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enumeration of task states that the scheduler considers. 
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><!-- doxytag: member="executing" ref="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9" args="" -->executing</em> </td><td>
+task is running, and will be destroyed after method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> completes. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><!-- doxytag: member="reexecute" ref="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513" args="" -->reexecute</em> </td><td>
+task to be rescheduled. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><!-- doxytag: member="ready" ref="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a" args="" -->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="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><!-- doxytag: member="allocated" ref="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c" args="" -->allocated</em> </td><td>
+task object is freshly allocated or recycled. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><!-- doxytag: member="freed" ref="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735" args="" -->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="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><!-- doxytag: member="recycle" ref="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d" args="" -->recycle</em> </td><td>
+task to be recycled as continuation </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="43bfe64c0e9333c0ca895cc0c375512b"></a><!-- doxytag: member="tbb::task::allocate_additional_child_of" ref="43bfe64c0e9333c0ca895cc0c375512b" args="(task &t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">internal::allocate_additional_child_of_proxy tbb::task::allocate_additional_child_of           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00174.html">task</a> & </td>
+          <td class="paramname"> <em>t</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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() 
+</div>
+</div><p>
+<a class="anchor" name="1434c79a5138993269d034008bff7329"></a><!-- doxytag: member="tbb::task::allocate_continuation" ref="1434c79a5138993269d034008bff7329" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">internal::allocate_continuation_proxy& tbb::task::allocate_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns proxy for overloaded new that allocates a continuation task of *this. 
+<p>
+The continuation's parent becomes the parent of *this. 
+</div>
+</div><p>
+<a class="anchor" name="0f3fb4aac549ab642022450a4bd13326"></a><!-- doxytag: member="tbb::task::cancel_group_execution" ref="0f3fb4aac549ab642022450a4bd13326" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::task::cancel_group_execution           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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>
+
+</div>
+</div><p>
+<a class="anchor" name="ef4680f5c148020c5e7e43ddef44cd5d"></a><!-- doxytag: member="tbb::task::decrement_ref_count" ref="ef4680f5c148020c5e7e43ddef44cd5d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int tbb::task::decrement_ref_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Atomically decrement reference count. 
+<p>
+Has release semanics. 
+</div>
+</div><p>
+<a class="anchor" name="a57def00c8e9d932dbea0b3ee23991b9"></a><!-- doxytag: member="tbb::task::destroy" ref="a57def00c8e9d932dbea0b3ee23991b9" args="(task &victim)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task::destroy           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00174.html">task</a> & </td>
+          <td class="paramname"> <em>victim</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroy a task. 
+<p>
+Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">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. 
+</div>
+</div><p>
+<a class="anchor" name="f5fb43c7ad0de5a4b95703cebc39e345"></a><!-- doxytag: member="tbb::task::increment_ref_count" ref="f5fb43c7ad0de5a4b95703cebc39e345" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::increment_ref_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-hash_compare - default argument 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+Atomically increment reference count. 
+<p>
+Has acquire semantics 
+</div>
+</div><p>
+<a class="anchor" name="713c338c8eeaebdc5a6b10a69c039b06"></a><!-- doxytag: member="tbb::task::note_affinity" ref="713c338c8eeaebdc5a6b10a69c039b06" args="(affinity_id id)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td>
+          <td class="paramname"> <em>id</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Invoked by scheduler to notify task that it ran on unexpected thread. 
+<p>
+Invoked before method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
+The default action does nothing. 
+</div>
+</div><p>
+<a class="anchor" name="a67a79e18f62b43a623a00cfbd76db4c"></a><!-- doxytag: member="tbb::task::recycle_as_continuation" ref="a67a79e18f62b43a623a00cfbd76db4c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_as_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">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. 
+</div>
+</div><p>
+<a class="anchor" name="3b290d14109704e2b69dc1ac980a7a76"></a><!-- doxytag: member="tbb::task::recycle_as_safe_continuation" ref="3b290d14109704e2b69dc1ac980a7a76" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_as_safe_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Recommended to use, safe variant of recycle_as_continuation. 
+<p>
+For safety, it requires additional increment of ref_count. 
+</div>
+</div><p>
+<a class="anchor" name="4f1be9bbcdb487830dbe298b68d85144"></a><!-- doxytag: member="tbb::task::recycle_to_reexecute" ref="4f1be9bbcdb487830dbe298b68d85144" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_to_reexecute           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Schedule this for reexecution after current <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. 
+<p>
+Requires that this.execute() be running. 
+</div>
+</div><p>
+<a class="anchor" name="f7737143d458f1ed1c0d7da3971d9e6b"></a><!-- doxytag: member="tbb::task::spawn" ref="f7737143d458f1ed1c0d7da3971d9e6b" args="(task &child)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::spawn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00174.html">task</a> & </td>
+          <td class="paramname"> <em>child</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Schedule task for execution when a worker becomes available. 
+<p>
+After all children spawned so far finish their method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">task::execute</a>, their parent's method <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">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. 
+</div>
+</div><p>
+<a class="anchor" name="c33c7edbaec67aa8a56f48986a9dc69f"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="c33c7edbaec67aa8a56f48986a9dc69f" args="(task_list &root_list)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::spawn_root_and_wait           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00176.html">task_list</a> & </td>
+          <td class="paramname"> <em>root_list</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Spawn root tasks on list and wait for all of them to finish. 
+<p>
+If there are more tasks than worker threads, the tasks are spawned in order of front to back. 
+</div>
+</div><p>
+<a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &root)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void tbb::task::spawn_root_and_wait           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00174.html">task</a> & </td>
+          <td class="paramname"> <em>root</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="53d2615ad9c38859b4c8080936600283"></a><!-- doxytag: member="tbb::task::wait_for_all" ref="53d2615ad9c38859b4c8080936600283" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::wait_for_all           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Wait for reference count to become one, and set reference count to zero. 
+<p>
+Works on tasks while waiting. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00367.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00174.png b/doc/html/a00174.png
new file mode 100644
index 0000000..497b6ad
Binary files /dev/null and b/doc/html/a00174.png differ
diff --git a/doc/html/a00175.html b/doc/html/a00175.html
index 650724d..d0ff309 100644
--- a/doc/html/a00175.html
+++ b/doc/html/a00175.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::thread_bound_filter Class Reference</title>
+<title>tbb::task_group_context Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,56 +21,169 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00175.html">thread_bound_filter</a></div>
-<h1>tbb::thread_bound_filter Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00175.html">task_group_context</a></div>
+<h1>tbb::task_group_context Class Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::thread_bound_filter" --><!-- doxytag: inherits="tbb::filter" -->A stage in a pipeline served by a user thread.  
+[<a class="el" href="a00246.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_group_context" -->Used to form groups of tasks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00347.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00367.html">task.h</a>></code>
 <p>
-Inherits <a class="el" href="a00139.html">tbb::filter</a>.
-<p>
-Inheritance diagram for tbb::thread_bound_filter:<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="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="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23"></a><!-- doxytag: member="tbb::thread_bound_filter::success" ref="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>success</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4"></a><!-- doxytag: member="tbb::task_group_context::isolated" ref="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>isolated</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b"></a><!-- doxytag: member="tbb::task_group_context::bound" ref="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>bound</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c"></a><!-- doxytag: member="tbb::task_group_context::exact_exception" ref="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>exact_exception</b> = 0x0001ul << traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38"></a><!-- doxytag: member="tbb::task_group_context::no_cancellation" ref="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>no_cancellation</b> = 0x0002ul << traits_offset</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="902c4645e624e8f589b89841df5331de5243cf0030982cfa4ac1a8e97acb39f4"></a><!-- doxytag: member="tbb::thread_bound_filter::item_not_available" ref="902c4645e624e8f589b89841df5331de5243cf0030982cfa4ac1a8e97acb39f4" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>item_not_available</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce"></a><!-- doxytag: member="tbb::task_group_context::concurrent_wait" ref="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>concurrent_wait</b> = 0x0004ul << traits_offset</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="902c4645e624e8f589b89841df5331ded4085a8b251604b51c0f19602eeef09f"></a><!-- doxytag: member="tbb::thread_bound_filter::end_of_stream" ref="902c4645e624e8f589b89841df5331ded4085a8b251604b51c0f19602eeef09f" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>end_of_stream</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><b>default_traits</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>result_type</b> { <b>success</b>, 
-<b>item_not_available</b>, 
-<b>end_of_stream</b>
+<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 class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>traits_type</b> { <b>exact_exception</b> =  0x0001ul << traits_offset, 
+<b>no_cancellation</b> =  0x0002ul << traits_offset, 
+<b>concurrent_wait</b> =  0x0004ul << traits_offset, 
+<b>default_traits</b>
  }</td></tr>
 
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> (kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default & binding constructor.  <a href="#19fee08fb8ac98adccfe69c1aa63c491"></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="a00175.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forcefully reinitializes the context after the task tree it was associated with is completed.  <a href="#6d30d16bf1cd22f86c6afaf29c2b430c"></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="a00175.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">If a data item is available, invoke operator() on that item.  <a href="#c4f90f2c771bce748beb9be734fa286c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</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="#8bcdfdf4e6bfb76125b6de15c00b571d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4db72f16210b0a991b2c134d6763a4cc"></a><!-- doxytag: member="tbb::task_group_context::is_group_execution_cancelled" ref="4db72f16210b0a991b2c134d6763a4cc" args="() const " -->
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait until a data item becomes available, and invoke operator() on that item.  <a href="#5e726bdc7fbd924c0b07bd558b1d4d5d"></a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <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="a00175.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Records the pending exception, and cancels the task group.  <a href="#d97c8a03615594b71b4ef06ff75cf561"></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="413fad2ade743d9af5dcabc56aedf4fe"></a><!-- doxytag: member="tbb::thread_bound_filter::thread_bound_filter" ref="413fad2ade743d9af5dcabc56aedf4fe" args="(mode filter_mode)" -->
- </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</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="a00175.html#49a55352084fd44b8863d182e839e6dc">init</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Out-of-line part of the constructor.  <a href="#49a55352084fd44b8863d182e839e6dc"></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="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_group_context::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
+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="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task_group_context::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
+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>
-A stage in a pipeline served by a user thread. 
+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="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root()</a> method. See <a class="el" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">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>
+IMPLEMENTATION NOTE: When adding new members to <a class="el" href="a00175.html">task_group_context</a> or changing types of existing ones, update the size of both padding buffers (_leading_padding and _trailing_padding) appropriately. See also VERSIONING NOTE at the constructor definition below. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="19fee08fb8ac98adccfe69c1aa63c491"></a><!-- doxytag: member="tbb::task_group_context::task_group_context" ref="19fee08fb8ac98adccfe69c1aa63c491" args="(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::task_group_context::task_group_context           </td>
+          <td>(</td>
+          <td class="paramtype">kind_type </td>
+          <td class="paramname"> <em>relation_with_parent</em> = <code>bound</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uintptr_t </td>
+          <td class="paramname"> <em>traits</em> = <code>default_traits</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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 contexts involve much less overhead, but they have limited utility. Normally when an exception occurs in an algorithm that has nested ones running, it is desirably to have all the nested algorithms canceled as well. Such a 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.<p>
+VERSIONING NOTE: Implementation(s) of <a class="el" href="a00175.html">task_group_context</a> constructor(s) cannot be made entirely out-of-line because the run-time version must be set by the user code. This will become critically important for binary compatibility, if we ever have to change the size of the context object.<p>
+Boosting the runtime version will also be necessary whenever new fields are introduced in the currently unused padding areas or the meaning of the existing fields is changed or extended. 
+</div>
+</div><p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="5e726bdc7fbd924c0b07bd558b1d4d5d"></a><!-- doxytag: member="tbb::thread_bound_filter::process_item" ref="5e726bdc7fbd924c0b07bd558b1d4d5d" args="()" -->
+<a class="anchor" name="8bcdfdf4e6bfb76125b6de15c00b571d"></a><!-- doxytag: member="tbb::task_group_context::cancel_group_execution" ref="8bcdfdf4e6bfb76125b6de15c00b571d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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 concurrently called on the same not yet cancelled context, true will be returned by one and only one invocation. 
+</div>
+</div><p>
+<a class="anchor" name="49a55352084fd44b8863d182e839e6dc"></a><!-- doxytag: member="tbb::task_group_context::init" ref="49a55352084fd44b8863d182e839e6dc" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::init           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [protected]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Out-of-line part of the constructor. 
+<p>
+Singled out to ensure backward binary compatibility of the future versions. 
+</div>
+</div><p>
+<a class="anchor" name="d97c8a03615594b71b4ef06ff75cf561"></a><!-- doxytag: member="tbb::task_group_context::register_pending_exception" ref="d97c8a03615594b71b4ef06ff75cf561" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item           </td>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::register_pending_exception           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
@@ -81,17 +194,17 @@ A stage in a pipeline served by a user thread.
 <div class="memdoc">
 
 <p>
-Wait until a data item becomes available, and invoke operator() on that item. 
+Records the pending exception, and cancels the task group. 
 <p>
-This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. 
+May be called only from inside a catch-block. If the context is already canceled, does nothing. The method brings the task group associated with this context exactly into the state it would be in, if one of its tasks threw the currently pending exception during its execution. In other words, it emulates the actions of the scheduler's dispatch loop exception handler. 
 </div>
 </div><p>
-<a class="anchor" name="c4f90f2c771bce748beb9be734fa286c"></a><!-- doxytag: member="tbb::thread_bound_filter::try_process_item" ref="c4f90f2c771bce748beb9be734fa286c" args="()" -->
+<a class="anchor" name="6d30d16bf1cd22f86c6afaf29c2b430c"></a><!-- doxytag: member="tbb::task_group_context::reset" ref="6d30d16bf1cd22f86c6afaf29c2b430c" args="()" -->
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item           </td>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
@@ -102,13 +215,15 @@ This interface is blocking. Returns 'success' if an item was processed. Returns
 <div class="memdoc">
 
 <p>
-If a data item is available, invoke operator() on that item. 
+Forcefully reinitializes the context after the task tree it was associated with is completed. 
 <p>
-This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. 
+Because the method assumes that all the tasks that used to be associated with this context have already finished, calling it while the context is still in use somewhere in the task hierarchy leads to undefined behavior.<p>
+IMPORTANT: This method is not thread safe!<p>
+The method does not change the context's parent if it is set. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<li><a class="el" href="a00367.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00176.html b/doc/html/a00176.html
index 92e11dc..d61e484 100644
--- a/doc/html/a00176.html
+++ b/doc/html/a00176.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::task_list Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,42 +21,54 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a></div>
-<h1>tbb::tick_count Class Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00176.html">task_list</a></div>
+<h1>tbb::task_list Class Reference<br>
 <small>
-[<a class="el" href="a00237.html">Timing</a>]</small>
-</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
+[<a class="el" href="a00246.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_list" -->A list of children.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00401.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00367.html">task.h</a>></code>
 <p>
-<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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="34593326ae4191e02a13c7cbdab9de4c"></a><!-- doxytag: member="tbb::tick_count::tick_count" ref="34593326ae4191e02a13c7cbdab9de4c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="416341c2047eaef50417b41eaf7e9de6"></a><!-- doxytag: member="tbb::task_list::task_list" ref="416341c2047eaef50417b41eaf7e9de6" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#416341c2047eaef50417b41eaf7e9de6">task_list</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="fb7f78ca61cf28398645ace66e284473"></a><!-- doxytag: member="tbb::tick_count::now" ref="fb7f78ca61cf28398645ace66e284473" args="()" -->
-static <a class="el" href="a00176.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</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="6d438f1499a02db1e59c24ab6043e5ba"></a><!-- doxytag: member="tbb::task_list::~task_list" ref="6d438f1499a02db1e59c24ab6043e5ba" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</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="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &t1, const tick_count &t0)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &t1, const <a class="el" href="a00176.html">tick_count</a> &t0)</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="f3ac31e092814b90929f81bb30441959"></a><!-- doxytag: member="tbb::task_list::empty" ref="f3ac31e092814b90929f81bb30441959" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#f3ac31e092814b90929f81bb30441959">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="4cd34756bc4763dafb8c84838a0124ff"></a><!-- doxytag: member="tbb::task_list::push_back" ref="4cd34756bc4763dafb8c84838a0124ff" args="(task &task)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00174.html">task</a> &<a class="el" href="a00174.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="5fe85df5ed524418389d34051750347d"></a><!-- doxytag: member="tbb::task_list::pop_front" ref="5fe85df5ed524418389d34051750347d" args="()" -->
+<a class="el" href="a00174.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#5fe85df5ed524418389d34051750347d">pop_front</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br></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="a00177.html">interval_t</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="fce446ee13e025969945328f3ff59b95"></a><!-- doxytag: member="tbb::task_list::clear" ref="fce446ee13e025969945328f3ff59b95" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#fce446ee13e025969945328f3ff59b95">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="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_list::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00177.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Absolute timestamp. 
+A list of children. 
+<p>
+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="a00401.html">tick_count.h</a></ul>
+<li><a class="el" href="a00367.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00177.html b/doc/html/a00177.html
index 697ab47..c4cef68 100644
--- a/doc/html/a00177.html
+++ b/doc/html/a00177.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::task_scheduler_init Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,57 +21,138 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a>::<a class="el" href="a00177.html">interval_t</a></div>
-<h1>tbb::tick_count::interval_t Class Reference</h1><!-- doxytag: class="tbb::tick_count::interval_t" -->Relative time interval.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00177.html">task_scheduler_init</a></div>
+<h1>tbb::task_scheduler_init Class Reference<br>
+<small>
+[<a class="el" href="a00246.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class representing reference to tbb scheduler.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00401.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00383.html">task_scheduler_init.h</a>></code>
 <p>
-<a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="75a9a0949f8a8a84d6758835f1b48dad"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="75a9a0949f8a8a84d6758835f1b48dad" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</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="a00177.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</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="1a21a428e00cced2e6a49e0f5f2258bf"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="1a21a428e00cced2e6a49e0f5f2258bf" args="(double sec)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a> (double sec)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread.  <a href="#d476053cc712e572554823492a5229ce"></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="a00177.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</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="d5d8429c0bc59cf6131b2abc7929fa59"></a><!-- doxytag: member="tbb::tick_count::interval_t::seconds" ref="d5d8429c0bc59cf6131b2abc7929fa59" args="() const " -->
-double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#d5ed214a8bb53b0466ed91ff4734b9a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f73257e04cb7fb9bd5be2b635d9016f1"></a><!-- doxytag: member="tbb::task_scheduler_init::terminate" ref="f73257e04cb7fb9bd5be2b635d9016f1" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a> ()</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="cd9814947902e26463a69a111530f81b"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+=" ref="cd9814947902e26463a69a111530f81b" args="(const interval_t &i)" -->
-<a class="el" href="a00177.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00177.html">interval_t</a> &i)</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="421600bf9bf9338bcf937063f2ff0e90"></a><!-- doxytag: member="tbb::task_scheduler_init::task_scheduler_init" ref="421600bf9bf9338bcf937063f2ff0e90" args="(int number_of_threads=automatic, stack_size_type thread_stack_size=0)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0)</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="35ff7eaf7c2031b4a991402ac9ecb940"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-=" ref="35ff7eaf7c2031b4a991402ac9ecb940" args="(const interval_t &i)" -->
-<a class="el" href="a00177.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00177.html">interval_t</a> &i)</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="4da6c86292d80c703a66c1f6f5299488"></a><!-- doxytag: member="tbb::task_scheduler_init::~task_scheduler_init" ref="4da6c86292d80c703a66c1f6f5299488" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a> ()</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="cc3a7ad7000317951ce61f706163efe8"></a><!-- doxytag: member="tbb::tick_count::interval_t::tbb::tick_count" ref="cc3a7ad7000317951ce61f706163efe8" args="" -->
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cc3a7ad7000317951ce61f706163efe8">tbb::tick_count</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="12752282977029f23416642bc03e8b74"></a><!-- doxytag: member="tbb::task_scheduler_init::is_active" ref="12752282977029f23416642bc03e8b74" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#12752282977029f23416642bc03e8b74">is_active</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &t1, const tick_count &t0)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &t1, const <a class="el" href="a00176.html">tick_count</a> &t0)</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">static int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ()</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="5871ead1ca230efbe52a5008470e6428"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+" ref="5871ead1ca230efbe52a5008470e6428" args="(const interval_t &i, const interval_t &j)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00177.html">interval_t</a> &i, const <a class="el" href="a00177.html">interval_t</a> &j)</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="#ba00714c33a41a3c2216f48613971cab"></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="8f5988e2b0fbb2d533fcbb7f2583743f"></a><!-- doxytag: member="tbb::task_scheduler_init::automatic" ref="8f5988e2b0fbb2d533fcbb7f2583743f" args="" -->
+static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1</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="fa509691e1d689830931e36edd274f76"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="fa509691e1d689830931e36edd274f76" args="(const interval_t &i, const interval_t &j)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00177.html">interval_t</a> &i, const <a class="el" href="a00177.html">interval_t</a> &j)</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="e6c860f1e559026ff3ef4599c0d6c514"></a><!-- doxytag: member="tbb::task_scheduler_init::deferred" ref="e6c860f1e559026ff3ef4599c0d6c514" args="" -->
+static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00177.html#d476053cc712e572554823492a5229ce">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Relative time interval. 
+Class representing reference to tbb scheduler. 
 <p>
+A thread must construct a <a class="el" href="a00177.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="ba00714c33a41a3c2216f48613971cab"></a><!-- doxytag: member="tbb::task_scheduler_init::default_num_threads" ref="ba00714c33a41a3c2216f48613971cab" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="d5ed214a8bb53b0466ed91ff4734b9a3"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d5ed214a8bb53b0466ed91ff4734b9a3" args="(int number_of_threads, stack_size_type thread_stack_size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>number_of_threads</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">stack_size_type </td>
+          <td class="paramname"> <em>thread_stack_size</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The overloaded method with stack size parameter. 
+<p>
+Overloading is necessary to preserve ABI compatibility 
+</div>
+</div><p>
+<a class="anchor" name="d476053cc712e572554823492a5229ce"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d476053cc712e572554823492a5229ce" args="(int number_of_threads=automatic)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>number_of_threads</em> = <code><a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></code>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00401.html">tick_count.h</a></ul>
+<li><a class="el" href="a00383.html">task_scheduler_init.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00178.html b/doc/html/a00178.html
index 59b2c0b..98b9c07 100644
--- a/doc/html/a00178.html
+++ b/doc/html/a00178.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::work_around_alignment_bug< Size, T > Struct Template Reference</title>
+<title>tbb::tbb_allocator< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,29 +21,104 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00178.html">work_around_alignment_bug</a></div>
-<h1>tbb::internal::work_around_alignment_bug< Size, T > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::work_around_alignment_bug" -->Work around for bug in GNU 3.2 and MSVC compilers.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00178.html">tbb_allocator</a></div>
+<h1>tbb::tbb_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::tbb_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00382.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00387.html">tbb_allocator.h</a>></code>
 <p>
-<a href="a00095.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>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="137d1b1dd94016bc52e423dc33c4fd1d"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="137d1b1dd94016bc52e423dc33c4fd1d" args="" -->
-static const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __alignof(T)</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="3cdd9619bc0a802763e7823068f83a4c"></a><!-- doxytag: member="tbb::tbb_allocator::value_type" ref="3cdd9619bc0a802763e7823068f83a4c" args="" -->
+typedef internal::allocator_type<<br>
+ T >::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="f979d0e74d7c6e5aeb0d26408776a9e1"></a><!-- doxytag: member="tbb::tbb_allocator::pointer" ref="f979d0e74d7c6e5aeb0d26408776a9e1" args="" -->
+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="1622504886ef265016a5821d61bf7adc"></a><!-- doxytag: member="tbb::tbb_allocator::const_pointer" ref="1622504886ef265016a5821d61bf7adc" args="" -->
+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="b8e58d23c5c98fd65d4432c1e324f4c0"></a><!-- doxytag: member="tbb::tbb_allocator::reference" ref="b8e58d23c5c98fd65d4432c1e324f4c0" args="" -->
+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="532f36f99650b1c26a2b8899383c5411"></a><!-- doxytag: member="tbb::tbb_allocator::const_reference" ref="532f36f99650b1c26a2b8899383c5411" args="" -->
+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="639df0fb169cfcb94ba1b12429b736f4"></a><!-- doxytag: member="tbb::tbb_allocator::size_type" ref="639df0fb169cfcb94ba1b12429b736f4" args="" -->
+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="54828b5d0b937d608f76650a5df0e39f"></a><!-- doxytag: member="tbb::tbb_allocator::difference_type" ref="54828b5d0b937d608f76650a5df0e39f" args="" -->
+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="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5"></a><!-- doxytag: member="tbb::tbb_allocator::scalable" ref="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>scalable</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf"></a><!-- doxytag: member="tbb::tbb_allocator::standard" ref="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>standard</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">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="d85cd071047b52eeb207d458d54098cc"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="d85cd071047b52eeb207d458d54098cc" args="(const tbb_allocator &)" -->
+ </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00178.html">tbb_allocator</a> &)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5c3cb04a50d15d38f4c66ca3e5d2f6af"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="5c3cb04a50d15d38f4c66ca3e5d2f6af" args="(const tbb_allocator< U > &)" -->
+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="a00178.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="08d3822344271d0a1c2e64e8c9c16b58"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="08d3822344271d0a1c2e64e8c9c16b58" args="(reference x) const " -->
+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="2b388f25858f783d995d61506de24656"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="2b388f25858f783d995d61506de24656" args="(const_reference x) const " -->
+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="f6cb487b1bdce0b581f265a77dca6d53"></a><!-- doxytag: member="tbb::tbb_allocator::allocate" ref="f6cb487b1bdce0b581f265a77dca6d53" args="(size_type n, const void *=0)" -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</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="fdd011fdf2f9ad07006dc7c0a7ec1da2"></a><!-- doxytag: member="tbb::tbb_allocator::deallocate" ref="fdd011fdf2f9ad07006dc7c0a7ec1da2" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</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="f059ca2c96243024f0d562ee3a87a3a5"></a><!-- doxytag: member="tbb::tbb_allocator::max_size" ref="f059ca2c96243024f0d562ee3a87a3a5" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">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="ab228ab9e324ed041c2226e1d717df5f"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="ab228ab9e324ed041c2226e1d717df5f" args="(pointer p, const value_type &value)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &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="ef133522bf55f05a605bee0763208281"></a><!-- doxytag: member="tbb::tbb_allocator::destroy" ref="ef133522bf55f05a605bee0763208281" args="(pointer p)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#ef133522bf55f05a605bee0763208281">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="78701e7454ef8e1a25b5acd364367080"></a><!-- doxytag: member="tbb::tbb_allocator::allocator_type" ref="78701e7454ef8e1a25b5acd364367080" args="()" -->
+static <a class="el" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></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>rebind</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<size_t Size, typename T><br>
- struct tbb::internal::work_around_alignment_bug< Size, T ></h3>
+<h3>template<typename T><br>
+ class tbb::tbb_allocator< T ></h3>
 
-Work around for bug in GNU 3.2 and MSVC compilers. 
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
 <p>
-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). 
+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 struct was generated from the following file:<ul>
-<li><a class="el" href="a00382.html">tbb_machine.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00387.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00179.html b/doc/html/a00179.html
index 7a11d92..9adfef7 100644
--- a/doc/html/a00179.html
+++ b/doc/html/a00179.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::zero_allocator< T, Allocator > Class Template Reference</title>
+<title>tbb::tbb_allocator< void > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,67 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00179.html">zero_allocator</a></div>
-<h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00179.html">tbb_allocator< void ></a></div>
+<h1>tbb::tbb_allocator< void > Class Template Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::zero_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::tbb_allocator< void >" -->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="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00387.html">tbb_allocator.h</a>></code>
 <p>
-<a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="77c87446a645cc3dbeba6fc82cc7eec0"></a><!-- doxytag: member="tbb::zero_allocator::base_allocator_type" ref="77c87446a645cc3dbeba6fc82cc7eec0" args="" -->
-typedef Allocator< T > </td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05f5ff584890407c8d672e4b4378744d"></a><!-- doxytag: member="tbb::tbb_allocator< void >::pointer" ref="05f5ff584890407c8d672e4b4378744d" args="" -->
+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="2eb3bf02103f455e0614e0a392388428"></a><!-- doxytag: member="tbb::zero_allocator::value_type" ref="2eb3bf02103f455e0614e0a392388428" args="" -->
-typedef base_allocator_type::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="33e64ba71f06ef24a5093415185e66cb"></a><!-- doxytag: member="tbb::tbb_allocator< void >::const_pointer" ref="33e64ba71f06ef24a5093415185e66cb" args="" -->
+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="54d0a81317a90278dc492d44cc7dcdfc"></a><!-- doxytag: member="tbb::zero_allocator::pointer" ref="54d0a81317a90278dc492d44cc7dcdfc" args="" -->
-typedef base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="50536b451124814064b0e8ff7b6cea21"></a><!-- doxytag: member="tbb::zero_allocator::const_pointer" ref="50536b451124814064b0e8ff7b6cea21" args="" -->
-typedef base_allocator_type::const_pointer </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="2ef488ecc55bf4a619f68b021d5b93e2"></a><!-- doxytag: member="tbb::zero_allocator::reference" ref="2ef488ecc55bf4a619f68b021d5b93e2" args="" -->
-typedef base_allocator_type::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="31f0de5db53e4c219e8548078572e1ff"></a><!-- doxytag: member="tbb::zero_allocator::const_reference" ref="31f0de5db53e4c219e8548078572e1ff" args="" -->
-typedef base_allocator_type::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="55acbfec8d7fd904c9b2040816522084"></a><!-- doxytag: member="tbb::zero_allocator::size_type" ref="55acbfec8d7fd904c9b2040816522084" args="" -->
-typedef base_allocator_type::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="c54d45a74bd3b48ff8db174c266ddede"></a><!-- doxytag: member="tbb::zero_allocator::difference_type" ref="c54d45a74bd3b48ff8db174c266ddede" args="" -->
-typedef base_allocator_type::difference_type </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="8c48c0436e3239be8f07c53c7f6658e4"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="8c48c0436e3239be8f07c53c7f6658e4" args="(const zero_allocator &a)" -->
- </td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a> &a)  throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="67685c1cfcd3b5f81ac8f3c8dd1375b9"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="67685c1cfcd3b5f81ac8f3c8dd1375b9" args="(const zero_allocator< U > &a)" -->
-template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a>< U > &a)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6e7eb50d9faeca418d56a9758357377"></a><!-- doxytag: member="tbb::zero_allocator::allocate" ref="b6e7eb50d9faeca418d56a9758357377" args="(const size_type n, const void *hint=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81595a776b9d206a92caa526cad9c637"></a><!-- doxytag: member="tbb::tbb_allocator< void >::value_type" ref="81595a776b9d206a92caa526cad9c637" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></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>rebind</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, template< typename X > class Allocator = tbb_allocator><br>
- class tbb::zero_allocator< T, Allocator ></h3>
+<h3>template<><br>
+ class tbb::tbb_allocator< void ></h3>
 
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
-<p>
-The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+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="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00387.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00180.html b/doc/html/a00180.html
index 6120f53..5787a8d 100644
--- a/doc/html/a00180.html
+++ b/doc/html/a00180.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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::zero_allocator< void, Allocator > Class Template Reference</title>
+<title>tbb::tbb_exception Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,42 +21,142 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00180.html">zero_allocator< void, Allocator ></a></div>
-<h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::zero_allocator< void, Allocator >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00180.html">tbb_exception</a></div>
+<h1>tbb::tbb_exception Class Reference</h1><!-- doxytag: class="tbb::tbb_exception" -->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="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::tbb_exception:
+<p><center><img src="a00180.png" usemap="#tbb::tbb_exception_map" border="0" alt=""></center>
+<map name="tbb::tbb_exception_map">
+<area href="a00132.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
+<area href="a00149.html" alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,56,506,80">
+</map>
+<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="ce4f3bf06e8aaf8020fa443297eff5f7"></a><!-- doxytag: member="tbb::zero_allocator< void, Allocator >::base_allocator_type" ref="ce4f3bf06e8aaf8020fa443297eff5f7" args="" -->
-typedef Allocator< void > </td><td class="memItemRight" valign="bottom"><b>base_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">virtual <a class="el" href="a00180.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> ()=0  throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5cd644eeecd6d729c848c8e99ffd4592"></a><!-- doxytag: member="tbb::zero_allocator< void, Allocator >::value_type" ref="5cd644eeecd6d729c848c8e99ffd4592" args="" -->
-typedef base_allocator_type::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#3e3482bf264d4ca4dde046cd9c02c766"></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="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> ()=0  throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f68aa346a17c94f8c5c7945a2c50858"></a><!-- doxytag: member="tbb::zero_allocator< void, Allocator >::pointer" ref="8f68aa346a17c94f8c5c7945a2c50858" args="" -->
-typedef base_allocator_type::pointer </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> method.  <a href="#66c94938eca8bf88b76f3eccaaf215d8"></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="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> ()=0</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae95a5761371ee7b61f2c339385684e9"></a><!-- doxytag: member="tbb::zero_allocator< void, Allocator >::const_pointer" ref="ae95a5761371ee7b61f2c339385684e9" args="" -->
-typedef base_allocator_type::const_pointer </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object.  <a href="#8588e07fa49692f4d734e4f2e4f048f4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d00f6497e552fee978a02bfcbebf46e2"></a><!-- doxytag: member="tbb::tbb_exception::name" ref="d00f6497e552fee978a02bfcbebf46e2" args="() const =0" -->
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#d00f6497e552fee978a02bfcbebf46e2">name</a> () const =0  throw ()</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>rebind</b></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="e8157689ecb66bc6c72d3618bf3cc371"></a><!-- doxytag: member="tbb::tbb_exception::what" ref="e8157689ecb66bc6c72d3618bf3cc371" args="() const =0" -->
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">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="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a> (void *p)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<template< typename T > class Allocator><br>
- class tbb::zero_allocator< void, Allocator ></h3>
+Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. 
+<p>
+If an unhandled exception of the type derived from <a class="el" href="a00180.html">tbb::tbb_exception</a> 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="a00175.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="a00132.html">tbb::captured_exception</a> and template class <a class="el" href="a00149.html">tbb::movable_exception</a>. See their declarations for more info. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="66c94938eca8bf88b76f3eccaaf215d8"></a><!-- doxytag: member="tbb::tbb_exception::destroy" ref="66c94938eca8bf88b76f3eccaaf215d8" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys objects created by the <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">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="a00132.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>.
+</div>
+</div><p>
+<a class="anchor" name="3e3482bf264d4ca4dde046cd9c02c766"></a><!-- doxytag: member="tbb::tbb_exception::move" ref="3e3482bf264d4ca4dde046cd9c02c766" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00180.html">tbb_exception</a>* tbb::tbb_exception::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <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="a00132.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>.
+</div>
+</div><p>
+<a class="anchor" name="3f2da7f3d8a6e4c1df522af1213afb5a"></a><!-- doxytag: member="tbb::tbb_exception::operator delete" ref="3f2da7f3d8a6e4c1df522af1213afb5a" args="(void *p)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::tbb_exception::operator delete           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>p</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
+When overriding method <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator. 
+</div>
+</div><p>
+<a class="anchor" name="8588e07fa49692f4d734e4f2e4f048f4"></a><!-- doxytag: member="tbb::tbb_exception::throw_self" ref="8588e07fa49692f4d734e4f2e4f048f4" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00149.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>.
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00180.png b/doc/html/a00180.png
new file mode 100644
index 0000000..496da7e
Binary files /dev/null and b/doc/html/a00180.png differ
diff --git a/doc/html/a00173.html b/doc/html/a00181.html
similarity index 85%
copy from doc/html/a00173.html
copy to doc/html/a00181.html
index d10e484..6403aca 100644
--- a/doc/html/a00173.html
+++ b/doc/html/a00181.html
@@ -21,31 +21,31 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00173.html">tbb_exception_ptr</a></div>
+<a class="el" href="a00237.html">tbb</a>::<b>internal</b>::<a class="el" href="a00181.html">tbb_exception_ptr</a></div>
 <h1>tbb::internal::tbb_exception_ptr Class Reference</h1><!-- doxytag: class="tbb::internal::tbb_exception_ptr" -->Exception container that preserves the exact copy of the original exception.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00381.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00393.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00087.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>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="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> ()  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> ()  throw ()</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys this objects.  <a href="#921875bbacd2c8a5f324c7da7a415262"></a><br></td></tr>
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="292832fd5c523e3d8081a22247840a1d"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::throw_self" ref="292832fd5c523e3d8081a22247840a1d" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> ()</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> ()</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Throws the contained exception . <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="65083750bebe799d3fe8143c794523bb"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="65083750bebe799d3fe8143c794523bb" args="()" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
+static <a class="el" href="a00181.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
 
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1111b00ba54b7fe35e6d3a0f21de287"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="d1111b00ba54b7fe35e6d3a0f21de287" args="(const tbb_exception &tag)" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00172.html">tbb_exception</a> &tag)</td></tr>
+static <a class="el" href="a00181.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00180.html">tbb_exception</a> &tag)</td></tr>
 
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c35e5db8e9cdff5d1387db5b0bad2e4a"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="c35e5db8e9cdff5d1387db5b0bad2e4a" args="(captured_exception &src)" -->
-static <a class="el" href="a00173.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00127.html">captured_exception</a> &src)</td></tr>
+static <a class="el" href="a00181.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00132.html">captured_exception</a> &src)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">This overload uses move semantics (i.e. it empties src). <br></td></tr>
 </table>
@@ -77,7 +77,7 @@ Note that objects of this type can be created only by the allocate() method.
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00393.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00175.html b/doc/html/a00182.html
similarity index 88%
copy from doc/html/a00175.html
copy to doc/html/a00182.html
index 650724d..1a02640 100644
--- a/doc/html/a00175.html
+++ b/doc/html/a00182.html
@@ -21,18 +21,21 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00175.html">thread_bound_filter</a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00182.html">thread_bound_filter</a></div>
 <h1>tbb::thread_bound_filter Class Reference<br>
 <small>
-[<a class="el" href="a00233.html">Algorithms</a>]</small>
+[<a class="el" href="a00241.html">Algorithms</a>]</small>
 </h1><!-- doxytag: class="tbb::thread_bound_filter" --><!-- doxytag: inherits="tbb::filter" -->A stage in a pipeline served by a user thread.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00347.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00360.html">pipeline.h</a>></code>
 <p>
-Inherits <a class="el" href="a00139.html">tbb::filter</a>.
-<p>
-Inheritance diagram for tbb::thread_bound_filter:<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">
+<p>Inheritance diagram for tbb::thread_bound_filter:
+<p><center><img src="a00182.png" usemap="#tbb::thread_bound_filter_map" border="0" alt=""></center>
+<map name="tbb::thread_bound_filter_map">
+<area href="a00144.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
+</map>
+<a href="a00046.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="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23"></a><!-- doxytag: member="tbb::thread_bound_filter::success" ref="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23" args="" -->
@@ -50,15 +53,15 @@ Inheritance diagram for tbb::thread_bound_filter:<center><font size="2">[<a href
  }</td></tr>
 
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a> ()</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">If a data item is available, invoke operator() on that item.  <a href="#c4f90f2c771bce748beb9be734fa286c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a> ()</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Wait until a data item becomes available, and invoke operator() on that item.  <a href="#5e726bdc7fbd924c0b07bd558b1d4d5d"></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="413fad2ade743d9af5dcabc56aedf4fe"></a><!-- doxytag: member="tbb::thread_bound_filter::thread_bound_filter" ref="413fad2ade743d9af5dcabc56aedf4fe" args="(mode filter_mode)" -->
- </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (<a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
@@ -108,7 +111,7 @@ This interface is non-blocking. Returns 'success' if an item was processed. Retu
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<li><a class="el" href="a00360.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00182.png b/doc/html/a00182.png
new file mode 100644
index 0000000..3327bd5
Binary files /dev/null and b/doc/html/a00182.png differ
diff --git a/doc/html/a00176.html b/doc/html/a00183.html
similarity index 79%
copy from doc/html/a00176.html
copy to doc/html/a00183.html
index 92e11dc..3918fc0 100644
--- a/doc/html/a00176.html
+++ b/doc/html/a00183.html
@@ -21,42 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00183.html">tick_count</a></div>
 <h1>tbb::tick_count Class Reference<br>
 <small>
-[<a class="el" href="a00237.html">Timing</a>]</small>
+[<a class="el" href="a00245.html">Timing</a>]</small>
 </h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00401.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00413.html">tick_count.h</a>></code>
 <p>
-<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>Public Member Functions</h2></td></tr>
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34593326ae4191e02a13c7cbdab9de4c"></a><!-- doxytag: member="tbb::tick_count::tick_count" ref="34593326ae4191e02a13c7cbdab9de4c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">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="fb7f78ca61cf28398645ace66e284473"></a><!-- doxytag: member="tbb::tick_count::now" ref="fb7f78ca61cf28398645ace66e284473" args="()" -->
-static <a class="el" href="a00176.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a> ()</td></tr>
+static <a class="el" href="a00183.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#fb7f78ca61cf28398645ace66e284473">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="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &t1, const tick_count &t0)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &t1, const <a class="el" href="a00176.html">tick_count</a> &t0)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00183.html">tick_count</a> &t1, const <a class="el" href="a00183.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>
 <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="a00177.html">interval_t</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">interval_t</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00177.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00184.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 Absolute timestamp. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00401.html">tick_count.h</a></ul>
+<li><a class="el" href="a00413.html">tick_count.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00177.html b/doc/html/a00184.html
similarity index 77%
copy from doc/html/a00177.html
copy to doc/html/a00184.html
index 697ab47..f4eec8a 100644
--- a/doc/html/a00177.html
+++ b/doc/html/a00184.html
@@ -21,49 +21,49 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a>::<a class="el" href="a00177.html">interval_t</a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00183.html">tick_count</a>::<a class="el" href="a00184.html">interval_t</a></div>
 <h1>tbb::tick_count::interval_t Class Reference</h1><!-- doxytag: class="tbb::tick_count::interval_t" -->Relative time interval.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00401.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00413.html">tick_count.h</a>></code>
 <p>
-<a href="a00099.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="75a9a0949f8a8a84d6758835f1b48dad"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="75a9a0949f8a8a84d6758835f1b48dad" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">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="1a21a428e00cced2e6a49e0f5f2258bf"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="1a21a428e00cced2e6a49e0f5f2258bf" args="(double sec)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a> (double sec)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#1a21a428e00cced2e6a49e0f5f2258bf">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="d5d8429c0bc59cf6131b2abc7929fa59"></a><!-- doxytag: member="tbb::tick_count::interval_t::seconds" ref="d5d8429c0bc59cf6131b2abc7929fa59" args="() const " -->
-double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a> () const </td></tr>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">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="cd9814947902e26463a69a111530f81b"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+=" ref="cd9814947902e26463a69a111530f81b" args="(const interval_t &i)" -->
-<a class="el" href="a00177.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00177.html">interval_t</a> &i)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00184.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="35ff7eaf7c2031b4a991402ac9ecb940"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-=" ref="35ff7eaf7c2031b4a991402ac9ecb940" args="(const interval_t &i)" -->
-<a class="el" href="a00177.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00177.html">interval_t</a> &i)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00184.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="cc3a7ad7000317951ce61f706163efe8"></a><!-- doxytag: member="tbb::tick_count::interval_t::tbb::tick_count" ref="cc3a7ad7000317951ce61f706163efe8" args="" -->
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cc3a7ad7000317951ce61f706163efe8">tbb::tick_count</a></td></tr>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#cc3a7ad7000317951ce61f706163efe8">tbb::tick_count</a></td></tr>
 
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &t1, const tick_count &t0)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &t1, const <a class="el" href="a00176.html">tick_count</a> &t0)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00183.html">tick_count</a> &t1, const <a class="el" href="a00183.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="5871ead1ca230efbe52a5008470e6428"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+" ref="5871ead1ca230efbe52a5008470e6428" args="(const interval_t &i, const interval_t &j)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00177.html">interval_t</a> &i, const <a class="el" href="a00177.html">interval_t</a> &j)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00184.html">interval_t</a> &i, const <a class="el" href="a00184.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="fa509691e1d689830931e36edd274f76"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="fa509691e1d689830931e36edd274f76" args="(const interval_t &i, const interval_t &j)" -->
-<a class="el" href="a00177.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00177.html">interval_t</a> &i, const <a class="el" href="a00177.html">interval_t</a> &j)</td></tr>
+<a class="el" href="a00184.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00184.html">interval_t</a> &i, const <a class="el" href="a00184.html">interval_t</a> &j)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
 </table>
@@ -71,7 +71,7 @@ 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="a00401.html">tick_count.h</a></ul>
+<li><a class="el" href="a00413.html">tick_count.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00178.html b/doc/html/a00185.html
similarity index 89%
copy from doc/html/a00178.html
copy to doc/html/a00185.html
index 59b2c0b..8778d50 100644
--- a/doc/html/a00178.html
+++ b/doc/html/a00185.html
@@ -21,13 +21,13 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00178.html">work_around_alignment_bug</a></div>
+<a class="el" href="a00237.html">tbb</a>::<b>internal</b>::<a class="el" href="a00185.html">work_around_alignment_bug</a></div>
 <h1>tbb::internal::work_around_alignment_bug< Size, T > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::work_around_alignment_bug" -->Work around for bug in GNU 3.2 and MSVC compilers.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00382.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00394.html">tbb_machine.h</a>></code>
 <p>
-<a href="a00095.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>Static Public Attributes</h2></td></tr>
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="137d1b1dd94016bc52e423dc33c4fd1d"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="137d1b1dd94016bc52e423dc33c4fd1d" args="" -->
@@ -43,7 +43,7 @@ Work around for bug in GNU 3.2 and MSVC compilers.
 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>
 <hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00382.html">tbb_machine.h</a></ul>
+<li><a class="el" href="a00394.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00179.html b/doc/html/a00186.html
similarity index 94%
copy from doc/html/a00179.html
copy to doc/html/a00186.html
index 7a11d92..9a16676 100644
--- a/doc/html/a00179.html
+++ b/doc/html/a00186.html
@@ -21,14 +21,14 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00179.html">zero_allocator</a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00186.html">zero_allocator</a></div>
 <h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
 </h1><!-- doxytag: class="tbb::zero_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00387.html">tbb_allocator.h</a>></code>
 <p>
 <a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
@@ -59,11 +59,11 @@ typedef base_allocator_type::difference_type </td><td class="memItemRight"
 
 <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="8c48c0436e3239be8f07c53c7f6658e4"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="8c48c0436e3239be8f07c53c7f6658e4" args="(const zero_allocator &a)" -->
- </td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a> &a)  throw ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00186.html">zero_allocator</a> &a)  throw ()</td></tr>
 
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="67685c1cfcd3b5f81ac8f3c8dd1375b9"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="67685c1cfcd3b5f81ac8f3c8dd1375b9" args="(const zero_allocator< U > &a)" -->
 template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a>< U > &a)  throw ()</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00186.html">zero_allocator</a>< U > &a)  throw ()</td></tr>
 
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6e7eb50d9faeca418d56a9758357377"></a><!-- doxytag: member="tbb::zero_allocator::allocate" ref="b6e7eb50d9faeca418d56a9758357377" args="(const size_type n, const void *hint=0)" -->
 pointer </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>
@@ -81,7 +81,7 @@ Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. 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="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00387.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00180.html b/doc/html/a00187.html
similarity index 92%
copy from doc/html/a00180.html
copy to doc/html/a00187.html
index 6120f53..2211a27 100644
--- a/doc/html/a00180.html
+++ b/doc/html/a00187.html
@@ -21,14 +21,14 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00180.html">zero_allocator< void, Allocator ></a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00187.html">zero_allocator< void, Allocator ></a></div>
 <h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
 <small>
-[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+[<a class="el" href="a00243.html">Memory Allocation</a>]</small>
 </h1><!-- doxytag: class="tbb::zero_allocator< void, Allocator >" -->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="a00375.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00387.html">tbb_allocator.h</a>></code>
 <p>
 <a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
@@ -56,7 +56,7 @@ typedef base_allocator_type::const_pointer </td><td class="memItemRight" va
 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="a00375.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00387.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00210.html b/doc/html/a00218.html
similarity index 85%
rename from doc/html/a00210.html
rename to doc/html/a00218.html
index a82debe..ac978cd 100644
--- a/doc/html/a00210.html
+++ b/doc/html/a00218.html
@@ -21,40 +21,40 @@
   </ul></div>
 <h1>scalable_allocator.h File Reference</h1>
 <p>
-<a href="a00351.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00364.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="a00229.html">tbb</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.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="a00158.html">tbb::scalable_allocator< T ></a></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::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="a00158.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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::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="a00159.html">tbb::scalable_allocator< void ></a></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::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="a00159.html#_details">More...</a><br></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="a00167.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="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">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="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">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="a00235.html#gca3579c21244dba9f0c351e5984d4565">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="a00243.html#gca3579c21244dba9f0c351e5984d4565">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="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">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="a00243.html#g951bbbbd2d041acb59ba5fa910b52543">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="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, 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="a00243.html#g3f5a2fde0bcaa3eda35be32c8658f444">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="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (void **memptr, size_t alignment, 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="a00243.html#g05dcec987480bb2c82ecdead6a085899">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="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">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="a00243.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">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="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">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="a00243.html#gbaea91376be80dfabd7c93eaffd9abaa">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="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_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="a00243.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (void *ptr)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
 
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="scalable_allocator.h::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
 template<typename T, typename U> </td></tr>
diff --git a/doc/html/a00229.html b/doc/html/a00229.html
deleted file mode 100644
index af07ca4..0000000
--- a/doc/html/a00229.html
+++ /dev/null
@@ -1,694 +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 Namespace Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
-    <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
-  </ul></div>
-<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="a00116.html">aligned_space</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="a00116.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="a00117.html">atomic</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00117.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="a00118.html">atomic< void * ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00118.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00118.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">blocked_range</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00122.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">blocked_range2d</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00123.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">blocked_range3d</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00124.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">cache_aligned_allocator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00125.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">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="a00126.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">combinable</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00128.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="a00174.html">tbb_hash_compare</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">hash_compare - default argument  <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="a00130.html">concurrent_hash_map</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00130.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">concurrent_bounded_queue</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00129.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">concurrent_vector</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00136.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">enumerable_thread_specific</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The thread local class template.  <a href="a00138.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>flattened2d</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00142.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">null_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00144.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">null_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00146.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">parallel_do_feeder</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks.  <a href="a00148.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="a00151.html">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="a00151.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="a00140.html">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="a00140.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">parallel_while</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00149.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00160.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00120.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">affinity_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00115.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00139.html#_details">More...</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">thread_bound_filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00175.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00150.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">queuing_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00152.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">queuing_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00154.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">recursive_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00156.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">scalable_allocator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00158.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">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="a00159.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">spin_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00161.html#_details">More...</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">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="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="a00167.html">task_group_context</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <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="a00166.html">task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00166.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00137.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">task_list</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <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"><b>task_handle</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>task_group</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>missing_wait</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>structured_task_group</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">task_scheduler_init</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler.  <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_allocator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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_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="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="a00179.html">zero_allocator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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="a00180.html">zero_allocator< void, Allocator ></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="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="a00121.html">bad_last_alloc</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00121.html#_details">More...</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_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="a00172.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">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="a00127.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">movable_exception</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="a00141.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">split</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00165.html#_details">More...</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">tick_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00176.html#_details">More...</a><br></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="a00232.html">strict_ppl</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <br></td></tr>
-
-<p>
-<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="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="tbb::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &body)" -->
-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="a00233.html#g3383e2703977012b6f384d673410f1f7">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="g2617dc9b88b3285a7212599d49f74228"></a><!-- doxytag: member="tbb::parallel_do" ref="g2617dc9b88b3285a7212599d49f74228" args="(Iterator first, Iterator last, const Body &body, task_group_context &context)" -->
-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="a00233.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00167.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="g68cc046ef72c42ce205fccbc435a0d81"></a><!-- doxytag: member="tbb::parallel_for" ref="g68cc046ef72c42ce205fccbc435a0d81" args="(const Range &range, const Body &body)" -->
-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="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a> (const Range &range, const Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g13cac5dd55c7533bccea43a51c33d0e5"></a><!-- doxytag: member="tbb::parallel_for" ref="g13cac5dd55c7533bccea43a51c33d0e5" args="(const Range &range, const Body &body, const simple_partitioner &partitioner)" -->
-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="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7ac75d532389b55b9247f3fdb0b00d1"></a><!-- doxytag: member="tbb::parallel_for" ref="ga7ac75d532389b55b9247f3fdb0b00d1" args="(const Range &range, const Body &body, const auto_partitioner &partitioner)" -->
-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="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g9cd1b210ceb1c040f30e390b4a21bde8"></a><!-- doxytag: member="tbb::parallel_for" ref="g9cd1b210ceb1c040f30e390b4a21bde8" args="(const Range &range, const Body &body, affinity_partitioner &partitioner)" -->
-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="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2d317a5e0078cd193125439fed60dfdc"></a><!-- doxytag: member="tbb::parallel_for" ref="g2d317a5e0078cd193125439fed60dfdc" args="(const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner, <a class="el" href="a00167.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="g1c0700e3f85e83a788ff3ede88ebb7e9"></a><!-- doxytag: member="tbb::parallel_for" ref="g1c0700e3f85e83a788ff3ede88ebb7e9" args="(const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner, <a class="el" href="a00167.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="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g04b4696b67370c01353ff5974c8f1196"></a><!-- doxytag: member="tbb::parallel_for" ref="g04b4696b67370c01353ff5974c8f1196" args="(const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00167.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="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_for_each</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbcb40499f038fd82deca88366b404790"></a><!-- doxytag: member="tbb::parallel_for_each" ref="gbcb40499f038fd82deca88366b404790" args="(InputIterator first, InputIterator last, Function f, task_group_context &context)" -->
-template<typename InputIterator, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a> (InputIterator first, InputIterator last, Function f, <a class="el" href="a00167.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g85a58ff0853f129adb6f9e4355326ccc"></a><!-- doxytag: member="tbb::parallel_for_each" ref="g85a58ff0853f129adb6f9e4355326ccc" args="(InputIterator first, InputIterator last, Function f)" -->
-template<typename InputIterator, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">parallel_for_each</a> (InputIterator first, InputIterator last, Function f)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_invoke</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbaadafdb93d290acec86e07fc8909c29"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gbaadafdb93d290acec86e07fc8909c29" args="(F0 f0, F1 f1, tbb::task_group_context &context)" -->
-template<typename F0, typename F1> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a> (F0 f0, F1 f1, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3cbf43007d0caeb4a2470265f50b25df"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3cbf43007d0caeb4a2470265f50b25df" args="(F0 f0, F1 f1, F2 f2, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g063924a497ba64c49351e80e39bd2c17"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g063924a497ba64c49351e80e39bd2c17" args="(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2ca8b49b9b36515247e45ffd9c0c11cf"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g2ca8b49b9b36515247e45ffd9c0c11cf" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g559685c3c13e103c6d570efef419c2b9"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g559685c3c13e103c6d570efef419c2b9" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd979d007cc4026c34691a4b38edd36af"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd979d007cc4026c34691a4b38edd36af" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd01a5d8f4902387d9081352e1edd1632"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd01a5d8f4902387d9081352e1edd1632" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bfc0ac0691dfa71d230f5c8c3e96"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g0a66bfc0ac0691dfa71d230f5c8c3e96" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g7182f6b5c88469cfc2b7c2ebbbd4a28c"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g7182f6b5c88469cfc2b7c2ebbbd4a28c" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context &context)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb999ec5f8b7f0b68b9752f11ad39ab08"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb999ec5f8b7f0b68b9752f11ad39ab08" args="(F0 f0, F1 f1)" -->
-template<typename F0, typename F1> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd" args="(F0 f0, F1 f1, F2 f2)" -->
-template<typename F0, typename F1, typename F2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g89c0569d95abd182f80acc38d0dbe2d4"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g89c0569d95abd182f80acc38d0dbe2d4" args="(F0 f0, F1 f1, F2 f2, F3 f3)" -->
-template<typename F0, typename F1, typename F2, typename F3> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3ef71e9441745fe708e66a0b817bebc7"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3ef71e9441745fe708e66a0b817bebc7" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g78fa19efd1a7cf7ffd1c23251c80b31d"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g78fa19efd1a7cf7ffd1c23251c80b31d" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gab2e69dbef9b3f0e658cf4b8e574f552"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gab2e69dbef9b3f0e658cf4b8e574f552" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g262f0347e5690bb692b6dc26e26b9ebe"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g262f0347e5690bb692b6dc26e26b9ebe" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g06a090fbd0eaaccf20e2409a2a222733"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g06a090fbd0eaaccf20e2409a2a222733" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3330e3c33053875705e19e29eda37627"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3330e3c33053875705e19e29eda37627" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)" -->
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)</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="g1b3d59c5eb62683c5754db6970392fa3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1b3d59c5eb62683c5754db6970392fa3" args="(const Range &range, Body &body)" -->
-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="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a> (const Range &range, Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gec1b7c03f9da909bef5db12e3d41bed3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gec1b7c03f9da909bef5db12e3d41bed3" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
-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="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18a19157e6245992fc00ca0adeb7dd37"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g18a19157e6245992fc00ca0adeb7dd37" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
-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="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc61e73fcc36c92d79a217fc355ff4a6b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc61e73fcc36c92d79a217fc355ff4a6b" args="(const Range &range, Body &body, affinity_partitioner &partitioner)" -->
-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="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g45cb00c42a18e334bbde8b7535afe460"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g45cb00c42a18e334bbde8b7535afe460" args="(const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner, <a class="el" href="a00167.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="g1c1ea1d7c61b3c225e92c70d669a53a5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1c1ea1d7c61b3c225e92c70d669a53a5" args="(const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner, <a class="el" href="a00167.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd9ac3a3811060314695f33b703c6e11b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gd9ac3a3811060314695f33b703c6e11b" args="(const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00167.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9412e09fb01fcad8c018ea9cffb28ef"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc9412e09fb01fcad8c018ea9cffb28ef" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)" -->
-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="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gaddffeec0e892ac3d6fc7fc2053e1eca"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gaddffeec0e892ac3d6fc7fc2053e1eca" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)" -->
-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="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb175401f0729e40dd2c5860a17c14385"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb175401f0729e40dd2c5860a17c14385" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)" -->
-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="a00233.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7f1f1828ae2b330ce05b8513a495154"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb7f1f1828ae2b330ce05b8513a495154" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)" -->
-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="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfbc0cc2026d87f11a96bcd62788f5bb5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gfbc0cc2026d87f11a96bcd62788f5bb5" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner, <a class="el" href="a00167.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="g630c90a399937d9d4ae70ff883186dfd"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g630c90a399937d9d4ae70ff883186dfd" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner, <a class="el" href="a00167.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g496bd7eadb3b97495ccb5655ef90319e"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g496bd7eadb3b97495ccb5655ef90319e" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)" -->
-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="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00115.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00167.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.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="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="tbb::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
-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="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a> (const Range &range, Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9fac8870b2e6365fb337014404529df"></a><!-- doxytag: member="tbb::parallel_scan" ref="gc9fac8870b2e6365fb337014404529df" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
-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="a00233.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00160.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g62fde400a37bbca1a2fddc8e3d22f556"></a><!-- doxytag: member="tbb::parallel_scan" ref="g62fde400a37bbca1a2fddc8e3d22f556" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
-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="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00120.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00120.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="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">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="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g16c3eb77d0e530834c51ce3857f01012"></a><!-- doxytag: member="tbb::parallel_sort" ref="g16c3eb77d0e530834c51ce3857f01012" args="(RandomAccessIterator begin, RandomAccessIterator end)" -->
-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="a00233.html#g16c3eb77d0e530834c51ce3857f01012">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="gc7576f82fdedc8a701a6c17ad9415926"></a><!-- doxytag: member="tbb::parallel_sort" ref="gc7576f82fdedc8a701a6c17ad9415926" args="(T *begin, T *end)" -->
-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="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">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="7fdc2b067a243747d4c3dfe6f3d28476"></a><!-- doxytag: member="tbb::spin_rw_mutex" ref="7fdc2b067a243747d4c3dfe6f3d28476" args="" -->
-typedef <a class="el" href="a00163.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="a3d457eb737199125df5ab0cf2f44094"></a><!-- doxytag: member="tbb::stack_size_type" ref="a3d457eb737199125df5ab0cf2f44094" args="" -->
-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="ceb89493291d4b03ce5f062fbaac0653"></a><!-- doxytag: member="tbb::task_scheduler_observer" ref="ceb89493291d4b03ce5f062fbaac0653" args="" -->
-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="ed375248ff6019a70ca0f9da528e5d0b"></a><!-- doxytag: member="tbb::assertion_handler_type" ref="ed375248ff6019a70ca0f9da528e5d0b" args="(const char *filename, int line, const char *expression, const char *comment)" -->
-typedef void(*) </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">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 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="a00229.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>, 
-<a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
-<a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing.  <a href="a00229.html#a8686246bb5d3664bd07563749970fef">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
-<b>ets_no_key</b>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
-<b>complete</b>, 
-<b>canceled</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="2e067bc86f20023cf3034f2ac310927b"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC" ref="2e067bc86f20023cf3034f2ac310927b" args="(__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><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="ad165cf61abbe349d413df2589679add"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC_ALT" ref="ad165cf61abbe349d413df2589679add" args="(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 > st [...]
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a> (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="a00117.html">atomic</a>< T * ></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7af9509624a62ea848afe775f892ed12"></a><!-- doxytag: member="tbb::operator==" ref="7af9509624a62ea848afe775f892ed12" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
-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="a00125.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00125.html">cache_aligned_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="426abbf5243087148f5e3767e68c286b"></a><!-- doxytag: member="tbb::operator!=" ref="426abbf5243087148f5e3767e68c286b" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
-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="a00125.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00125.html">cache_aligned_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2babc190640003767a3049a4d3c5ee35"></a><!-- doxytag: member="tbb::tbb_hasher" ref="2babc190640003767a3049a4d3c5ee35" args="(const T &t)" -->
-template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a> (const T &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Hasher functions. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3835d3fac75c3963cbfc312c67ddbba3"></a><!-- doxytag: member="tbb::tbb_hasher" ref="3835d3fac75c3963cbfc312c67ddbba3" args="(P *ptr)" -->
-template<typename P> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (P *ptr)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="057a50bf70efdeabd5756f8698015b0f"></a><!-- doxytag: member="tbb::tbb_hasher" ref="057a50bf70efdeabd5756f8698015b0f" args="(const std::basic_string< E, S, A > &s)" -->
-template<typename E, typename S, typename A> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::basic_string< E, S, A > &s)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="77bb4a96964d4d9cb058a9791bac9b0d"></a><!-- doxytag: member="tbb::tbb_hasher" ref="77bb4a96964d4d9cb058a9791bac9b0d" args="(const std::pair< F, S > &p)" -->
-template<typename F, typename S> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::pair< F, S > &p)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f3609fc523a99c101572fdc68f918d66"></a><!-- doxytag: member="tbb::operator==" ref="f3609fc523a99c101572fdc68f918d66" args="(const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)" -->
-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="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2da30ff86b9a39722f45bc35e1c6934d"></a><!-- doxytag: member="tbb::operator!=" ref="2da30ff86b9a39722f45bc35e1c6934d" args="(const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)" -->
-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="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="817c20df80fe1a933a8557eb76113e24"></a><!-- doxytag: member="tbb::swap" ref="817c20df80fe1a933a8557eb76113e24" args="(concurrent_hash_map< Key, T, HashCompare, A > &a, concurrent_hash_map< Key, T, HashCompare, A > &b)" -->
-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="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00130.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="11419db87ac98110907dda08a24f0949"></a><!-- doxytag: member="tbb::operator==" ref="11419db87ac98110907dda08a24f0949" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="aa9e09f2e9154ffd6658fad8355fb491"></a><!-- doxytag: member="tbb::operator!=" ref="aa9e09f2e9154ffd6658fad8355fb491" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="33267dd805415351956d45b4b5347190"></a><!-- doxytag: member="tbb::operator<" ref="33267dd805415351956d45b4b5347190" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="14e2968ab20cb714bef1f0352fc152f0"></a><!-- doxytag: member="tbb::operator>" ref="14e2968ab20cb714bef1f0352fc152f0" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0042a36a670a397fb52e713edbaecd0e"></a><!-- doxytag: member="tbb::operator<=" ref="0042a36a670a397fb52e713edbaecd0e" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f70eb1d931473b69ba4bcf93af8baa33"></a><!-- doxytag: member="tbb::operator>=" ref="f70eb1d931473b69ba4bcf93af8baa33" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00136.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4a3897ea8d8a48e885d764bd7d370d50"></a><!-- doxytag: member="tbb::swap" ref="4a3897ea8d8a48e885d764bd7d370d50" args="(concurrent_vector< T, A > &a, concurrent_vector< T, A > &b)" -->
-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="a00136.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00136.html">concurrent_vector</a>< T, A > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="cac990ecc7b1d2088bf5d047801d63a5"></a><!-- doxytag: member="tbb::flatten2d" ref="cac990ecc7b1d2088bf5d047801d63a5" args="(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e)" -->
-template<typename Container> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d< Container > </td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b327db9f1ccb9bdfcdbacbf07fac6d10"></a><!-- doxytag: member="tbb::flatten2d" ref="b327db9f1ccb9bdfcdbacbf07fac6d10" args="(const Container &c)" -->
-template<typename Container> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d< Container > </td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &c)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="tbb::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
-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="a00158.html">scalable_allocator</a>< T > &, const <a class="el" href="a00158.html">scalable_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="tbb::operator!=" ref="a92757aca0a69082eb8dc223eb257433" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
-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="a00158.html">scalable_allocator</a>< T > &, const <a class="el" href="a00158.html">scalable_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2f5baabe173fbf48e94fb9058f1b41"></a><!-- doxytag: member="tbb::is_current_task_group_canceling" ref="7e2f5baabe173fbf48e94fb9058f1b41" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>is_current_task_group_canceling</b> ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3bb9a8b837a9b7c4b5107caf01e81329"></a><!-- doxytag: member="tbb::make_task" ref="3bb9a8b837a9b7c4b5107caf01e81329" args="(const F &f)" -->
-template<class F> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">task_handle< F > </td><td class="memTemplItemRight" valign="bottom"><b>make_task</b> (const F &f)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c8a46d6c0fe474eb399d0d09c27a4685"></a><!-- doxytag: member="tbb::operator==" ref="c8a46d6c0fe474eb399d0d09c27a4685" args="(const tbb_allocator< T > &, const tbb_allocator< U > &)" -->
-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="a00170.html">tbb_allocator</a>< T > &, const <a class="el" href="a00170.html">tbb_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3d9665c21c894f06f1614947103dc9d6"></a><!-- doxytag: member="tbb::operator!=" ref="3d9665c21c894f06f1614947103dc9d6" args="(const tbb_allocator< T > &, const tbb_allocator< U > &)" -->
-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="a00170.html">tbb_allocator</a>< T > &, const <a class="el" href="a00170.html">tbb_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b64fb7e52f0049b5a103cbb6fb5814f0"></a><!-- doxytag: member="tbb::operator==" ref="b64fb7e52f0049b5a103cbb6fb5814f0" args="(const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)" -->
-template<typename T1, template< typename X1 > class B1, typename T2, template< typename X2 > class B2> </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="a00179.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00179.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ae43b5151d0220fe3ade0b447cd64f0d"></a><!-- doxytag: member="tbb::operator!=" ref="ae43b5151d0220fe3ade0b447cd64f0d" args="(const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)" -->
-template<typename T1, template< typename X1 > class B1, typename T2, template< typename X2 > class B2> </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="a00179.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00179.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="823fa1c15dd829d1d9167157450ddcd9"></a><!-- doxytag: member="tbb::set_assertion_handler" ref="823fa1c15dd829d1d9167157450ddcd9" args="(assertion_handler_type new_handler)" -->
-<a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">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="a00229.html#3d1252787be39b4aef311f1cadaff9e8">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="#3d1252787be39b4aef311f1cadaff9e8"></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="a00229.html#a6858b22e90041c9c4669674ff39b056">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="#a6858b22e90041c9c4669674ff39b056"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6a42aa5dbcf06ba86c71efb73d8311c3"></a><!-- doxytag: member="tbb::operator-" ref="6a42aa5dbcf06ba86c71efb73d8311c3" args="(const tick_count &t1, const tick_count &t0)" -->
-<a class="el" href="a00177.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00176.html">tick_count</a> &t1, const <a class="el" href="a00176.html">tick_count</a> &t0)</td></tr>
-
-<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6902d551186a654ffbf88582d4a0bdfa"></a><!-- doxytag: member="tbb::hash_multiplier" ref="6902d551186a654ffbf88582d4a0bdfa" args="" -->
-static const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Hash multiplier. <br></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="a8686246bb5d3664bd07563749970fef"></a><!-- doxytag: member="tbb::memory_semantics" ref="a8686246bb5d3664bd07563749970fef" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Specifies memory fencing. 
-<p>
-<dl compact><dt><b>Enumerator: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c"></a><!-- doxytag: member="__TBB_full_fence" ref="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c" args="" -->__TBB_full_fence</em> </td><td>
-For internal use only. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em> </td><td>
-Acquire fence. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em> </td><td>
-Release fence. </td></tr>
-</table>
-</dl>
-
-</div>
-</div><p>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="3d1252787be39b4aef311f1cadaff9e8"></a><!-- doxytag: member="tbb::assertion_failure" ref="3d1252787be39b4aef311f1cadaff9e8" args="(const char *filename, int line, const char *expression, const char *comment)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC tbb::assertion_failure           </td>
-          <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>line</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>expression</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>comment</em></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<a class="anchor" name="a6858b22e90041c9c4669674ff39b056"></a><!-- doxytag: member="tbb::TBB_runtime_interface_version" ref="a6858b22e90041c9c4669674ff39b056" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<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. 
-</div>
-</div><p>
-<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/a00237.html b/doc/html/a00237.html
index 9f15f5e..4157a0f 100644
--- a/doc/html/a00237.html
+++ b/doc/html/a00237.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Timing</title>
+<title>tbb Namespace Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -9,18 +9,675 @@
   <ul>
     <li><a href="index.html"><span>Main Page</span></a></li>
     <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
     <li><a href="annotated.html"><span>Classes</span></a></li>
     <li><a href="files.html"><span>Files</span></a></li>
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
-<h1>Timing</h1><table border="0" cellpadding="0" cellspacing="0">
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
+  </ul></div>
+<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="a00176.html">tbb::tick_count</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">aligned_space</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="a00121.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="a00122.html">atomic</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00122.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="a00123.html">atomic< void * ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00123.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00123.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">blocked_range</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00127.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">blocked_range2d</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00128.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">blocked_range3d</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00129.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">cache_aligned_allocator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00130.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">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="a00131.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">combinable</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00133.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">concurrent_hash_map</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00135.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">concurrent_bounded_queue</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">concurrent_vector</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00141.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">enumerable_thread_specific</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The thread local class template.  <a href="a00143.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>flattened2d</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00150.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00152.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00154.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">parallel_do_feeder</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks.  <a href="a00156.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="a00159.html">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="a00159.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="a00145.html">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="a00145.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html">parallel_while</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00157.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <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="a00125.html">auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00125.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">affinity_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00120.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00144.html#_details">More...</a><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">thread_bound_filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <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"><a class="el" href="a00158.html">pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00158.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00160.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <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="a00164.html">recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00164.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">scalable_allocator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00166.html#_details">More...</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">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="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="a00169.html">spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <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="a00171.html">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="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="a00175.html">task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00175.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <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="a00142.html">empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00142.html#_details">More...</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">task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <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"><b>task_handle</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>task_group</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>structured_task_group</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler.  <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"><a class="el" href="a00178.html">tbb_allocator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00178.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">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="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="a00186.html">zero_allocator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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="a00187.html">zero_allocator< void, Allocator ></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="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="a00126.html">bad_last_alloc</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00126.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">improper_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00146.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">missing_wait</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on structured_task_group.  <a href="a00148.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">invalid_multiple_scheduling</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for repeated scheduling of the same task_handle.  <a href="a00147.html#_details">More...</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_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="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="a00132.html">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="a00132.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">movable_exception</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="a00149.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html">split</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00173.html#_details">More...</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">tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00183.html#_details">More...</a><br></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="a00240.html">strict_ppl</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <br></td></tr>
+
+<p>
+<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="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="tbb::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &body)" -->
+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="a00241.html#g3383e2703977012b6f384d673410f1f7">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="g2617dc9b88b3285a7212599d49f74228"></a><!-- doxytag: member="tbb::parallel_do" ref="g2617dc9b88b3285a7212599d49f74228" args="(Iterator first, Iterator last, const Body &body, task_group_context &context)" -->
+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="a00241.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00175.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="g68cc046ef72c42ce205fccbc435a0d81"></a><!-- doxytag: member="tbb::parallel_for" ref="g68cc046ef72c42ce205fccbc435a0d81" args="(const Range &range, const Body &body)" -->
+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="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a> (const Range &range, const Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g13cac5dd55c7533bccea43a51c33d0e5"></a><!-- doxytag: member="tbb::parallel_for" ref="g13cac5dd55c7533bccea43a51c33d0e5" args="(const Range &range, const Body &body, const simple_partitioner &partitioner)" -->
+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="a00241.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7ac75d532389b55b9247f3fdb0b00d1"></a><!-- doxytag: member="tbb::parallel_for" ref="ga7ac75d532389b55b9247f3fdb0b00d1" args="(const Range &range, const Body &body, const auto_partitioner &partitioner)" -->
+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="a00241.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g9cd1b210ceb1c040f30e390b4a21bde8"></a><!-- doxytag: member="tbb::parallel_for" ref="g9cd1b210ceb1c040f30e390b4a21bde8" args="(const Range &range, const Body &body, affinity_partitioner &partitioner)" -->
+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="a00241.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2d317a5e0078cd193125439fed60dfdc"></a><!-- doxytag: member="tbb::parallel_for" ref="g2d317a5e0078cd193125439fed60dfdc" args="(const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner, <a class="el" href="a00175.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="g1c0700e3f85e83a788ff3ede88ebb7e9"></a><!-- doxytag: member="tbb::parallel_for" ref="g1c0700e3f85e83a788ff3ede88ebb7e9" args="(const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner, <a class="el" href="a00175.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="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g04b4696b67370c01353ff5974c8f1196"></a><!-- doxytag: member="tbb::parallel_for" ref="g04b4696b67370c01353ff5974c8f1196" args="(const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00175.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="a00120.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for_each</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gcd40c32f319747e61a8f73fcfc452001"></a><!-- doxytag: member="tbb::parallel_for_each" ref="gcd40c32f319747e61a8f73fcfc452001" args="(InputIterator first, InputIterator last, const Function &f, task_group_context &context)" -->
+template<typename InputIterator, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00175.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc2d710ca573f0a9bd94379cba3772def"></a><!-- doxytag: member="tbb::parallel_for_each" ref="gc2d710ca573f0a9bd94379cba3772def" args="(InputIterator first, InputIterator last, const Function &f)" -->
+template<typename InputIterator, typename Function> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gc2d710ca573f0a9bd94379cba3772def">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_invoke</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd3e2998f171494f94c2103f4eb924084"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd3e2998f171494f94c2103f4eb924084" args="(const F0 &f0, const F1 &f1, tbb::task_group_context &context)" -->
+template<typename F0, typename F1> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g4eb73562e4145c8343ed9f996267f039"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g4eb73562e4145c8343ed9f996267f039" args="(const F0 &f0, const F1 &f1, const F2 &f2, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd1335c4b54fbf8d3f5be6a5c255c8c60"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd1335c4b54fbf8d3f5be6a5c255c8c60" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g40b88e3db7ecb09cbfe0230ea1c24030"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g40b88e3db7ecb09cbfe0230ea1c24030" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g98a8b388f7e0b7621a964a8c23752d1d"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g98a8b388f7e0b7621a964a8c23752d1d" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb95f31638bdde9d909361ad2e96a93eb"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb95f31638bdde9d909361ad2e96a93eb" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00176.html#_details">More...</a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1655b24786f010ee0a008907a07bb61d"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g1655b24786f010ee0a008907a07bb61d" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g105220f1c95f9888b696a3e47027527b"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g105220f1c95f9888b696a3e47027527b" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1ef1774e0fcc4f632fe0af2591781c4c"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g1ef1774e0fcc4f632fe0af2591781c4c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, tbb::task_group_context &context)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ge832d8ad8b246c884e3c897ed63f8216"></a><!-- doxytag: member="tbb::parallel_invoke" ref="ge832d8ad8b246c884e3c897ed63f8216" args="(const F0 &f0, const F1 &f1)" -->
+template<typename F0, typename F1> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb91fec4e7ba49754ad583ccb127afc66"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb91fec4e7ba49754ad583ccb127afc66" args="(const F0 &f0, const F1 &f1, const F2 &f2)" -->
+template<typename F0, typename F1, typename F2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g421d0f66ee69eea134a35d1ae371d8d6"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g421d0f66ee69eea134a35d1ae371d8d6" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)" -->
+template<typename F0, typename F1, typename F2, typename F3> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g8aacce74d691b4f44a0f7becadd9578c"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g8aacce74d691b4f44a0f7becadd9578c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g8cc6994f7cd6eaf25feb5d7cc04a2e64"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g8cc6994f7cd6eaf25feb5d7cc04a2e64" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g995ba9583ae24bddb8bd9a599cc8b4c7"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g995ba9583ae24bddb8bd9a599cc8b4c7" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g34341a4c24c6f548886cd14077374c5c"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g34341a4c24c6f548886cd14077374c5c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2a11342753488d460866d48370a69517"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g2a11342753488d460866d48370a69517" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gffcf6835ceee43455f310352a3b4faa5"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gffcf6835ceee43455f310352a3b4faa5" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)" -->
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</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="g1b3d59c5eb62683c5754db6970392fa3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1b3d59c5eb62683c5754db6970392fa3" args="(const Range &range, Body &body)" -->
+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="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a> (const Range &range, Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gec1b7c03f9da909bef5db12e3d41bed3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gec1b7c03f9da909bef5db12e3d41bed3" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
+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="a00241.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18a19157e6245992fc00ca0adeb7dd37"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g18a19157e6245992fc00ca0adeb7dd37" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
+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="a00241.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc61e73fcc36c92d79a217fc355ff4a6b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc61e73fcc36c92d79a217fc355ff4a6b" args="(const Range &range, Body &body, affinity_partitioner &partitioner)" -->
+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="a00241.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g45cb00c42a18e334bbde8b7535afe460"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g45cb00c42a18e334bbde8b7535afe460" args="(const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner, <a class="el" href="a00175.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="g1c1ea1d7c61b3c225e92c70d669a53a5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1c1ea1d7c61b3c225e92c70d669a53a5" args="(const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner, <a class="el" href="a00175.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd9ac3a3811060314695f33b703c6e11b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gd9ac3a3811060314695f33b703c6e11b" args="(const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00175.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9412e09fb01fcad8c018ea9cffb28ef"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc9412e09fb01fcad8c018ea9cffb28ef" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)" -->
+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="a00241.html#gc9412e09fb01fcad8c018ea9cffb28ef">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gaddffeec0e892ac3d6fc7fc2053e1eca"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gaddffeec0e892ac3d6fc7fc2053e1eca" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)" -->
+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="a00241.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb175401f0729e40dd2c5860a17c14385"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb175401f0729e40dd2c5860a17c14385" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)" -->
+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="a00241.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7f1f1828ae2b330ce05b8513a495154"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb7f1f1828ae2b330ce05b8513a495154" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)" -->
+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="a00241.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfbc0cc2026d87f11a96bcd62788f5bb5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gfbc0cc2026d87f11a96bcd62788f5bb5" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner, <a class="el" href="a00175.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="g630c90a399937d9d4ae70ff883186dfd"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g630c90a399937d9d4ae70ff883186dfd" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner, <a class="el" href="a00175.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g496bd7eadb3b97495ccb5655ef90319e"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g496bd7eadb3b97495ccb5655ef90319e" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)" -->
+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="a00241.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00120.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00175.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.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="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="tbb::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
+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="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a> (const Range &range, Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9fac8870b2e6365fb337014404529df"></a><!-- doxytag: member="tbb::parallel_scan" ref="gc9fac8870b2e6365fb337014404529df" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
+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="a00241.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00168.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g62fde400a37bbca1a2fddc8e3d22f556"></a><!-- doxytag: member="tbb::parallel_scan" ref="g62fde400a37bbca1a2fddc8e3d22f556" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
+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="a00241.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00125.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00125.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="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">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="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g16c3eb77d0e530834c51ce3857f01012"></a><!-- doxytag: member="tbb::parallel_sort" ref="g16c3eb77d0e530834c51ce3857f01012" args="(RandomAccessIterator begin, RandomAccessIterator end)" -->
+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="a00241.html#g16c3eb77d0e530834c51ce3857f01012">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="gc7576f82fdedc8a701a6c17ad9415926"></a><!-- doxytag: member="tbb::parallel_sort" ref="gc7576f82fdedc8a701a6c17ad9415926" args="(T *begin, T *end)" -->
+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="a00241.html#gc7576f82fdedc8a701a6c17ad9415926">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="bf4486f36580f7d4bf95aed2e052a380"></a><!-- doxytag: member="tbb::critical_section" ref="bf4486f36580f7d4bf95aed2e052a380" args="" -->
+typedef internal::critical_section_v4 </td><td class="memItemRight" valign="bottom"><b>critical_section</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fdc2b067a243747d4c3dfe6f3d28476"></a><!-- doxytag: member="tbb::spin_rw_mutex" ref="7fdc2b067a243747d4c3dfe6f3d28476" args="" -->
+typedef <a class="el" href="a00171.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="a3d457eb737199125df5ab0cf2f44094"></a><!-- doxytag: member="tbb::stack_size_type" ref="a3d457eb737199125df5ab0cf2f44094" args="" -->
+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="ceb89493291d4b03ce5f062fbaac0653"></a><!-- doxytag: member="tbb::task_scheduler_observer" ref="ceb89493291d4b03ce5f062fbaac0653" args="" -->
+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="ed375248ff6019a70ca0f9da528e5d0b"></a><!-- doxytag: member="tbb::assertion_handler_type" ref="ed375248ff6019a70ca0f9da528e5d0b" args="(const char *filename, int line, const char *expression, const char *comment)" -->
+typedef void(*) </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">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 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="a00237.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>, 
+<a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
+<a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing.  <a href="a00237.html#a8686246bb5d3664bd07563749970fef">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
+<b>ets_no_key</b>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
+<b>complete</b>, 
+<b>canceled</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="2e067bc86f20023cf3034f2ac310927b"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC" ref="2e067bc86f20023cf3034f2ac310927b" args="(__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><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="ad165cf61abbe349d413df2589679add"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC_ALT" ref="ad165cf61abbe349d413df2589679add" args="(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 > st [...]
+size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a> (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="a00122.html">atomic</a>< T * ></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for atomic<T*> with arithmetic and operator->. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7af9509624a62ea848afe775f892ed12"></a><!-- doxytag: member="tbb::operator==" ref="7af9509624a62ea848afe775f892ed12" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
+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="a00130.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00130.html">cache_aligned_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="426abbf5243087148f5e3767e68c286b"></a><!-- doxytag: member="tbb::operator!=" ref="426abbf5243087148f5e3767e68c286b" args="(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)" -->
+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="a00130.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00130.html">cache_aligned_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4b4d8d820cb2ec18147261226f2dd999"></a><!-- doxytag: member="tbb::tbb_hasher" ref="4b4d8d820cb2ec18147261226f2dd999" args="(const T &t)" -->
+template<typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">size_t </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a> (const T &t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Hasher functions. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="8f289e50dd0f44bd454acbeeaf368376"></a><!-- doxytag: member="tbb::tbb_hasher" ref="8f289e50dd0f44bd454acbeeaf368376" args="(P *ptr)" -->
+template<typename P> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (P *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5c8af1cda078ee9c708c35271ea9c0d4"></a><!-- doxytag: member="tbb::tbb_hasher" ref="5c8af1cda078ee9c708c35271ea9c0d4" args="(const std::basic_string< E, S, A > &s)" -->
+template<typename E, typename S, typename A> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::basic_string< E, S, A > &s)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2b28d6aee7af88e0e2c6571d14cb5f59"></a><!-- doxytag: member="tbb::tbb_hasher" ref="2b28d6aee7af88e0e2c6571d14cb5f59" args="(const std::pair< F, S > &p)" -->
+template<typename F, typename S> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">size_t </td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::pair< F, S > &p)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="11419db87ac98110907dda08a24f0949"></a><!-- doxytag: member="tbb::operator==" ref="11419db87ac98110907dda08a24f0949" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="aa9e09f2e9154ffd6658fad8355fb491"></a><!-- doxytag: member="tbb::operator!=" ref="aa9e09f2e9154ffd6658fad8355fb491" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="33267dd805415351956d45b4b5347190"></a><!-- doxytag: member="tbb::operator<" ref="33267dd805415351956d45b4b5347190" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="14e2968ab20cb714bef1f0352fc152f0"></a><!-- doxytag: member="tbb::operator>" ref="14e2968ab20cb714bef1f0352fc152f0" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0042a36a670a397fb52e713edbaecd0e"></a><!-- doxytag: member="tbb::operator<=" ref="0042a36a670a397fb52e713edbaecd0e" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f70eb1d931473b69ba4bcf93af8baa33"></a><!-- doxytag: member="tbb::operator>=" ref="f70eb1d931473b69ba4bcf93af8baa33" args="(const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00141.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4a3897ea8d8a48e885d764bd7d370d50"></a><!-- doxytag: member="tbb::swap" ref="4a3897ea8d8a48e885d764bd7d370d50" args="(concurrent_vector< T, A > &a, concurrent_vector< T, A > &b)" -->
+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="a00141.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00141.html">concurrent_vector</a>< T, A > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="cac990ecc7b1d2088bf5d047801d63a5"></a><!-- doxytag: member="tbb::flatten2d" ref="cac990ecc7b1d2088bf5d047801d63a5" args="(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e)" -->
+template<typename Container> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d< Container > </td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b327db9f1ccb9bdfcdbacbf07fac6d10"></a><!-- doxytag: member="tbb::flatten2d" ref="b327db9f1ccb9bdfcdbacbf07fac6d10" args="(const Container &c)" -->
+template<typename Container> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d< Container > </td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &c)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="tbb::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
+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="a00166.html">scalable_allocator</a>< T > &, const <a class="el" href="a00166.html">scalable_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="tbb::operator!=" ref="a92757aca0a69082eb8dc223eb257433" args="(const scalable_allocator< T > &, const scalable_allocator< U > &)" -->
+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="a00166.html">scalable_allocator</a>< T > &, const <a class="el" href="a00166.html">scalable_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2f5baabe173fbf48e94fb9058f1b41"></a><!-- doxytag: member="tbb::is_current_task_group_canceling" ref="7e2f5baabe173fbf48e94fb9058f1b41" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>is_current_task_group_canceling</b> ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3bb9a8b837a9b7c4b5107caf01e81329"></a><!-- doxytag: member="tbb::make_task" ref="3bb9a8b837a9b7c4b5107caf01e81329" args="(const F &f)" -->
+template<class F> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">task_handle< F > </td><td class="memTemplItemRight" valign="bottom"><b>make_task</b> (const F &f)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c8a46d6c0fe474eb399d0d09c27a4685"></a><!-- doxytag: member="tbb::operator==" ref="c8a46d6c0fe474eb399d0d09c27a4685" args="(const tbb_allocator< T > &, const tbb_allocator< U > &)" -->
+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="a00178.html">tbb_allocator</a>< T > &, const <a class="el" href="a00178.html">tbb_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3d9665c21c894f06f1614947103dc9d6"></a><!-- doxytag: member="tbb::operator!=" ref="3d9665c21c894f06f1614947103dc9d6" args="(const tbb_allocator< T > &, const tbb_allocator< U > &)" -->
+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="a00178.html">tbb_allocator</a>< T > &, const <a class="el" href="a00178.html">tbb_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b64fb7e52f0049b5a103cbb6fb5814f0"></a><!-- doxytag: member="tbb::operator==" ref="b64fb7e52f0049b5a103cbb6fb5814f0" args="(const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)" -->
+template<typename T1, template< typename X1 > class B1, typename T2, template< typename X2 > class B2> </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="a00186.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00186.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ae43b5151d0220fe3ade0b447cd64f0d"></a><!-- doxytag: member="tbb::operator!=" ref="ae43b5151d0220fe3ade0b447cd64f0d" args="(const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)" -->
+template<typename T1, template< typename X1 > class B1, typename T2, template< typename X2 > class B2> </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="a00186.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00186.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="823fa1c15dd829d1d9167157450ddcd9"></a><!-- doxytag: member="tbb::set_assertion_handler" ref="823fa1c15dd829d1d9167157450ddcd9" args="(assertion_handler_type new_handler)" -->
+<a class="el" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">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="a00237.html#3d1252787be39b4aef311f1cadaff9e8">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="#3d1252787be39b4aef311f1cadaff9e8"></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="a00237.html#a6858b22e90041c9c4669674ff39b056">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="#a6858b22e90041c9c4669674ff39b056"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6a42aa5dbcf06ba86c71efb73d8311c3"></a><!-- doxytag: member="tbb::operator-" ref="6a42aa5dbcf06ba86c71efb73d8311c3" args="(const tick_count &t1, const tick_count &t0)" -->
+<a class="el" href="a00184.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00183.html">tick_count</a> &t1, const <a class="el" href="a00183.html">tick_count</a> &t0)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6902d551186a654ffbf88582d4a0bdfa"></a><!-- doxytag: member="tbb::hash_multiplier" ref="6902d551186a654ffbf88582d4a0bdfa" args="" -->
+static const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Hash multiplier. <br></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="a8686246bb5d3664bd07563749970fef"></a><!-- doxytag: member="tbb::memory_semantics" ref="a8686246bb5d3664bd07563749970fef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Specifies memory fencing. 
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c"></a><!-- doxytag: member="__TBB_full_fence" ref="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c" args="" -->__TBB_full_fence</em> </td><td>
+For internal use only. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em> </td><td>
+Acquire fence. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em> </td><td>
+Release fence. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="3d1252787be39b4aef311f1cadaff9e8"></a><!-- doxytag: member="tbb::assertion_failure" ref="3d1252787be39b4aef311f1cadaff9e8" args="(const char *filename, int line, const char *expression, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC tbb::assertion_failure           </td>
+          <td>(</td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>filename</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>expression</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"> <em>comment</em></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="a6858b22e90041c9c4669674ff39b056"></a><!-- doxytag: member="tbb::TBB_runtime_interface_version" ref="a6858b22e90041c9c4669674ff39b056" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<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. 
+</div>
+</div><p>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00239.html b/doc/html/a00239.html
deleted file mode 100644
index f46461b..0000000
--- a/doc/html/a00239.html
+++ /dev/null
@@ -1,903 +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_internal.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>_concurrent_queue_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_internal_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_internal_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <iterator></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <new></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a><a class="code" href="a00229.html">00033</a> <span class="keyword">namespace </span>tbb {
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="comment">// forward declaration</span>
-<a name="l00038"></a><a class="code" href="a00232.html">00038</a> <span class="keyword">namespace </span>strict_ppl {
-<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>;
-<a name="l00040"></a>00040 }
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00129.html">concurrent_bounded_queue</a>;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="keyword">namespace </span>deprecated {
-<a name="l00045"></a>00045 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>;
-<a name="l00046"></a>00046 }
-<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00050"></a>00050 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053 <span class="keyword">namespace </span>internal {
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keyword">using namespace </span>tbb::internal;
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">typedef</span> size_t ticket;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">void</span>* invalid_page;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue ;
-<a name="l00062"></a>00062 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue_pop_finalizer ;
-<a name="l00063"></a>00063 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_base_v3;
-<a name="l00064"></a>00064 
-<a name="l00066"></a>00066 
-<a name="l00069"></a>00069 <span class="keyword">struct </span>concurrent_queue_rep_base : no_copy {
-<a name="l00070"></a>00070     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue;
-<a name="l00071"></a>00071     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_base_v3;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keyword">protected</span>:
-<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> size_t phi = 3;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keyword">public</span>:
-<a name="l00078"></a>00078     <span class="comment">// must be power of 2</span>
-<a name="l00079"></a>00079     <span class="keyword">static</span> <span class="keyword">const</span> size_t n_queue = 8;
-<a name="l00080"></a>00080 
-<a name="l00082"></a>00082     <span class="keyword">struct </span>page {
-<a name="l00083"></a>00083         page* next;
-<a name="l00084"></a>00084         uintptr_t mask; 
-<a name="l00085"></a>00085     };
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     atomic<ticket> head_counter;
-<a name="l00088"></a>00088     <span class="keywordtype">char</span> pad1[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
-<a name="l00089"></a>00089     atomic<ticket> tail_counter;
-<a name="l00090"></a>00090     <span class="keywordtype">char</span> pad2[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
-<a name="l00091"></a>00091 
-<a name="l00093"></a>00093     size_t items_per_page;
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096     size_t item_size;
-<a name="l00097"></a>00097 
-<a name="l00099"></a>00099     atomic<size_t> n_invalid_entries;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keywordtype">char</span> pad3[NFS_MaxLineSize-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(atomic<size_t>)];
-<a name="l00102"></a>00102 } ;
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105 
-<a name="l00108"></a>00108 <span class="keyword">class </span>concurrent_queue_page_allocator
-<a name="l00109"></a>00109 {
-<a name="l00110"></a>00110     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue ;
-<a name="l00111"></a>00111     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer ;
-<a name="l00112"></a>00112 <span class="keyword">protected</span>:
-<a name="l00113"></a>00113     <span class="keyword">virtual</span> ~concurrent_queue_page_allocator() {}
-<a name="l00114"></a>00114 <span class="keyword">private</span>:
-<a name="l00115"></a>00115     <span class="keyword">virtual</span> concurrent_queue_rep_base::page* allocate_page() = 0;
-<a name="l00116"></a>00116     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
-<a name="l00117"></a>00117 } ;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="comment">// unary minus operator applied to unsigned type, result still unsigned</span>
-<a name="l00121"></a>00121 <span class="preprocessor">#pragma warning( push )</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( disable: 4146 )</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00126"></a>00126 
-<a name="l00128"></a>00128 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00129"></a>00129 <span class="keyword">class </span>micro_queue : no_copy {
-<a name="l00130"></a>00130     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
-<a name="l00131"></a>00131 
-<a name="l00133"></a>00133     <span class="keyword">class </span>destroyer: no_copy {
-<a name="l00134"></a>00134         T& my_value;
-<a name="l00135"></a>00135     <span class="keyword">public</span>:
-<a name="l00136"></a>00136         destroyer( T& value ) : my_value(value) {}
-<a name="l00137"></a>00137         ~destroyer() {my_value.~T();}          
-<a name="l00138"></a>00138     };
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     T& get_ref( page& page, size_t index ) {
-<a name="l00141"></a>00141         <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
-<a name="l00145"></a>00145         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
-<a name="l00146"></a>00146     }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keywordtype">void</span> copy_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
-<a name="l00149"></a>00149         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
-<a name="l00150"></a>00150     }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
-<a name="l00153"></a>00153         T& from = get_ref(src,index);
-<a name="l00154"></a>00154         destroyer d(from);
-<a name="l00155"></a>00155         *static_cast<T*>(dst) = from;
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordtype">void</span> spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) <span class="keyword">const </span>;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="keyword">public</span>:
-<a name="l00161"></a>00161     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer<T>;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     atomic<page*> head_page;
-<a name="l00164"></a>00164     atomic<ticket> head_counter;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     atomic<page*> tail_page;
-<a name="l00167"></a>00167     atomic<ticket> tail_counter;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     spin_mutex page_mutex;
-<a name="l00170"></a>00170     
-<a name="l00171"></a>00171     <span class="keywordtype">void</span> push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keywordtype">bool</span> pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     micro_queue& assign( <span class="keyword">const</span> micro_queue& src, concurrent_queue_base_v3<T>& base ) ;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     page* make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="keywordtype">void</span> make_invalid( ticket k ) ;
-<a name="l00180"></a>00180 };
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00183"></a>00183 <span class="keywordtype">void</span> micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb )<span class="keyword"> const </span>{
-<a name="l00184"></a>00184     atomic_backoff backoff;
-<a name="l00185"></a>00185     <span class="keywordflow">do</span> {
-<a name="l00186"></a>00186         backoff.pause();
-<a name="l00187"></a>00187         <span class="keywordflow">if</span>( counter&0x1 ) {
-<a name="l00188"></a>00188             ++rb.n_invalid_entries;
-<a name="l00189"></a>00189             throw_bad_last_alloc_exception_v4();
-<a name="l00190"></a>00190         }
-<a name="l00191"></a>00191     } <span class="keywordflow">while</span>( counter!=k ) ;
-<a name="l00192"></a>00192 }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00195"></a>00195 <span class="keywordtype">void</span> micro_queue<T>::push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) {
-<a name="l00196"></a>00196     k &= -concurrent_queue_rep_base::n_queue;
-<a name="l00197"></a>00197     page* p = NULL;
-<a name="l00198"></a>00198     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00199"></a>00199     <span class="keywordflow">if</span>( !index ) {
-<a name="l00200"></a>00200         <span class="keywordflow">try</span> {
-<a name="l00201"></a>00201             concurrent_queue_page_allocator& pa = base;
-<a name="l00202"></a>00202             p = pa.allocate_page();
-<a name="l00203"></a>00203         } <span class="keywordflow">catch</span> (...) {
-<a name="l00204"></a>00204             ++base.my_rep->n_invalid_entries;
-<a name="l00205"></a>00205             make_invalid( k );
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207         p->mask = 0;
-<a name="l00208"></a>00208         p->next = NULL;
-<a name="l00209"></a>00209     }
-<a name="l00210"></a>00210     
-<a name="l00211"></a>00211     <span class="keywordflow">if</span>( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
-<a name="l00212"></a>00212         
-<a name="l00213"></a>00213     <span class="keywordflow">if</span>( p ) {
-<a name="l00214"></a>00214         spin_mutex::scoped_lock lock( page_mutex );
-<a name="l00215"></a>00215         <span class="keywordflow">if</span>( page* q = tail_page )
-<a name="l00216"></a>00216             q->next = p;
-<a name="l00217"></a>00217         <span class="keywordflow">else</span>
-<a name="l00218"></a>00218             head_page = p; 
-<a name="l00219"></a>00219         tail_page = p;
-<a name="l00220"></a>00220     } <span class="keywordflow">else</span> {
-<a name="l00221"></a>00221         p = tail_page;
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223    
-<a name="l00224"></a>00224     <span class="keywordflow">try</span> {
-<a name="l00225"></a>00225         copy_item( *p, index, item );
-<a name="l00226"></a>00226         <span class="comment">// If no exception was thrown, mark item as present.</span>
-<a name="l00227"></a>00227         p->mask |= uintptr_t(1)<<index;
-<a name="l00228"></a>00228         tail_counter += concurrent_queue_rep_base::n_queue; 
-<a name="l00229"></a>00229     } <span class="keywordflow">catch</span> (...) {
-<a name="l00230"></a>00230         ++base.my_rep->n_invalid_entries;
-<a name="l00231"></a>00231         tail_counter += concurrent_queue_rep_base::n_queue; 
-<a name="l00232"></a>00232         <span class="keywordflow">throw</span>;
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234 }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00237"></a>00237 <span class="keywordtype">bool</span> micro_queue<T>::pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
-<a name="l00238"></a>00238     k &= -concurrent_queue_rep_base::n_queue;
-<a name="l00239"></a>00239     <span class="keywordflow">if</span>( head_counter!=k ) spin_wait_until_eq( head_counter, k );
-<a name="l00240"></a>00240     <span class="keywordflow">if</span>( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
-<a name="l00241"></a>00241     page& p = *head_page;
-<a name="l00242"></a>00242     __TBB_ASSERT( &p, NULL );
-<a name="l00243"></a>00243     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00244"></a>00244     <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; 
-<a name="l00245"></a>00245     {
-<a name="l00246"></a>00246         micro_queue_pop_finalizer<T> finalizer( *<span class="keyword">this</span>, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
-<a name="l00247"></a>00247         <span class="keywordflow">if</span>( p.mask & uintptr_t(1)<<index ) {
-<a name="l00248"></a>00248             success = <span class="keyword">true</span>;
-<a name="l00249"></a>00249             assign_and_destroy_item( dst, p, index );
-<a name="l00250"></a>00250         } <span class="keywordflow">else</span> {
-<a name="l00251"></a>00251             --base.my_rep->n_invalid_entries;
-<a name="l00252"></a>00252         }
-<a name="l00253"></a>00253     }
-<a name="l00254"></a>00254     <span class="keywordflow">return</span> success;
-<a name="l00255"></a>00255 }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00258"></a>00258 micro_queue<T>& micro_queue<T>::assign( <span class="keyword">const</span> micro_queue<T>& src, concurrent_queue_base_v3<T>& base ) {
-<a name="l00259"></a>00259     head_counter = src.head_counter;
-<a name="l00260"></a>00260     tail_counter = src.tail_counter;
-<a name="l00261"></a>00261     page_mutex   = src.page_mutex;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="keyword">const</span> page* srcp = src.head_page;
-<a name="l00264"></a>00264     <span class="keywordflow">if</span>( srcp ) {
-<a name="l00265"></a>00265         ticket g_index = head_counter;
-<a name="l00266"></a>00266         <span class="keywordflow">try</span> {
-<a name="l00267"></a>00267             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
-<a name="l00268"></a>00268             size_t index = head_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00269"></a>00269             size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271             head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
-<a name="l00272"></a>00272             page* cur_page = head_page;
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274             <span class="keywordflow">if</span>( srcp != src.tail_page ) {
-<a name="l00275"></a>00275                 <span class="keywordflow">for</span>( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
-<a name="l00276"></a>00276                     cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index );
-<a name="l00277"></a>00277                     cur_page = cur_page->next;
-<a name="l00278"></a>00278                 }
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280                 __TBB_ASSERT( srcp==src.tail_page, NULL );
-<a name="l00281"></a>00281                 size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-<a name="l00282"></a>00282                 <span class="keywordflow">if</span>( last_index==0 ) last_index = base.my_rep->items_per_page;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284                 cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
-<a name="l00285"></a>00285                 cur_page = cur_page->next;
-<a name="l00286"></a>00286             }
-<a name="l00287"></a>00287             tail_page = cur_page;
-<a name="l00288"></a>00288         } <span class="keywordflow">catch</span> (...) {
-<a name="l00289"></a>00289             make_invalid( g_index );
-<a name="l00290"></a>00290         }
-<a name="l00291"></a>00291     } <span class="keywordflow">else</span> {
-<a name="l00292"></a>00292         head_page = tail_page = NULL;
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00295"></a>00295 }
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00298"></a>00298 <span class="keywordtype">void</span> micro_queue<T>::make_invalid( ticket k ) {
-<a name="l00299"></a>00299     <span class="keyword">static</span> page dummy = {static_cast<page*>((<span class="keywordtype">void</span>*)1), 0};
-<a name="l00300"></a>00300     <span class="comment">// mark it so that no more pushes are allowed.</span>
-<a name="l00301"></a>00301     invalid_page = &dummy;
-<a name="l00302"></a>00302     {
-<a name="l00303"></a>00303         spin_mutex::scoped_lock lock( page_mutex );
-<a name="l00304"></a>00304         tail_counter = k+concurrent_queue_rep_base::n_queue+1;
-<a name="l00305"></a>00305         <span class="keywordflow">if</span>( page* q = tail_page )
-<a name="l00306"></a>00306             q->next = static_cast<page*>(invalid_page);
-<a name="l00307"></a>00307         <span class="keywordflow">else</span>
-<a name="l00308"></a>00308             head_page = static_cast<page*>(invalid_page); 
-<a name="l00309"></a>00309         tail_page = static_cast<page*>(invalid_page);
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311     <span class="keywordflow">throw</span>;
-<a name="l00312"></a>00312 }
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00315"></a>00315 concurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) {
-<a name="l00316"></a>00316     concurrent_queue_page_allocator& pa = base;
-<a name="l00317"></a>00317     page* new_page = pa.allocate_page();
-<a name="l00318"></a>00318     new_page->next = NULL;
-<a name="l00319"></a>00319     new_page->mask = src_page->mask;
-<a name="l00320"></a>00320     <span class="keywordflow">for</span>( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
-<a name="l00321"></a>00321         <span class="keywordflow">if</span>( new_page->mask & uintptr_t(1)<<begin_in_page )
-<a name="l00322"></a>00322             copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
-<a name="l00323"></a>00323     <span class="keywordflow">return</span> new_page;
-<a name="l00324"></a>00324 }
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00327"></a>00327 <span class="keyword">class </span>micro_queue_pop_finalizer: no_copy {
-<a name="l00328"></a>00328     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
-<a name="l00329"></a>00329     ticket my_ticket;
-<a name="l00330"></a>00330     micro_queue<T>& my_queue;
-<a name="l00331"></a>00331     page* my_page; 
-<a name="l00332"></a>00332     concurrent_queue_page_allocator& allocator;
-<a name="l00333"></a>00333 <span class="keyword">public</span>:
-<a name="l00334"></a>00334     micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
-<a name="l00335"></a>00335         my_ticket(k), my_queue(queue), my_page(p), allocator(b)
-<a name="l00336"></a>00336     {}
-<a name="l00337"></a>00337     ~micro_queue_pop_finalizer() ;
-<a name="l00338"></a>00338 };
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00341"></a>00341 micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
-<a name="l00342"></a>00342     page* p = my_page;
-<a name="l00343"></a>00343     <span class="keywordflow">if</span>( p ) {
-<a name="l00344"></a>00344         spin_mutex::scoped_lock lock( my_queue.page_mutex );
-<a name="l00345"></a>00345         page* q = p->next;
-<a name="l00346"></a>00346         my_queue.head_page = q;
-<a name="l00347"></a>00347         <span class="keywordflow">if</span>( !q ) {
-<a name="l00348"></a>00348             my_queue.tail_page = NULL;
-<a name="l00349"></a>00349         }
-<a name="l00350"></a>00350     }
-<a name="l00351"></a>00351     my_queue.head_counter = my_ticket;
-<a name="l00352"></a>00352     <span class="keywordflow">if</span>( p ) {
-<a name="l00353"></a>00353         allocator.deallocate_page( p );
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355 }
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00358"></a>00358 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( pop )</span>
-<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4146 is back</span>
-<a name="l00360"></a>00360 <span class="preprocessor"></span>
-<a name="l00361"></a>00361 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_rep ;
-<a name="l00362"></a>00362 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00363"></a>00363 
-<a name="l00365"></a>00365 
-<a name="l00368"></a>00368 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00369"></a>00369 <span class="keyword">struct </span>concurrent_queue_rep : <span class="keyword">public</span> concurrent_queue_rep_base {
-<a name="l00370"></a>00370     micro_queue<T> array[n_queue];
-<a name="l00371"></a>00371 
-<a name="l00373"></a>00373     <span class="keyword">static</span> size_t index( ticket k ) {
-<a name="l00374"></a>00374         <span class="keywordflow">return</span> k*phi%n_queue;
-<a name="l00375"></a>00375     }
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377     micro_queue<T>& choose( ticket k ) {
-<a name="l00378"></a>00378         <span class="comment">// The formula here approximates LRU in a cache-oblivious way.</span>
-<a name="l00379"></a>00379         <span class="keywordflow">return</span> array[index(k)];
-<a name="l00380"></a>00380     }
-<a name="l00381"></a>00381 };
-<a name="l00382"></a>00382 
-<a name="l00384"></a>00384 
-<a name="l00388"></a>00388 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00389"></a>00389 <span class="keyword">class </span>concurrent_queue_base_v3: <span class="keyword">public</span> concurrent_queue_page_allocator {
-<a name="l00391"></a>00391     concurrent_queue_rep<T>* my_rep;
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393     <span class="keyword">friend</span> <span class="keyword">struct </span>concurrent_queue_rep<T>;
-<a name="l00394"></a>00394     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue<T>;
-<a name="l00395"></a>00395     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep<T>;
-<a name="l00396"></a>00396     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3<T>;
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 <span class="keyword">protected</span>:
-<a name="l00399"></a>00399     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_rep<T>::page page;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 <span class="keyword">private</span>:
-<a name="l00402"></a>00402     <span class="comment">/* override */</span> <span class="keyword">virtual</span> page *allocate_page() {
-<a name="l00403"></a>00403         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00404"></a>00404         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
-<a name="l00405"></a>00405         <span class="keywordflow">return</span> reinterpret_cast<page*>(allocate_block ( n ));
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="comment">/* override */</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page *p ) {
-<a name="l00409"></a>00409         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00410"></a>00410         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
-<a name="l00411"></a>00411         deallocate_block( reinterpret_cast<void*>(p), n );
-<a name="l00412"></a>00412     }
-<a name="l00413"></a>00413 
-<a name="l00415"></a>00415     <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) = 0;
-<a name="l00416"></a>00416 
-<a name="l00418"></a>00418     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *p, size_t n ) = 0;
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420 <span class="keyword">protected</span>:
-<a name="l00421"></a>00421     concurrent_queue_base_v3( size_t item_size ) ;
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423     <span class="comment">/* override */</span> <span class="keyword">virtual</span> ~concurrent_queue_base_v3() {
-<a name="l00424"></a>00424         size_t nq = my_rep->n_queue;
-<a name="l00425"></a>00425         <span class="keywordflow">for</span>( size_t i=0; i<nq; i++ )
-<a name="l00426"></a>00426             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, <span class="stringliteral">"pages were not freed properly"</span> );
-<a name="l00427"></a>00427         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
-<a name="l00428"></a>00428     }
-<a name="l00429"></a>00429 
-<a name="l00431"></a>00431     <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
-<a name="l00432"></a>00432         concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00433"></a>00433         ticket k = r.tail_counter++;
-<a name="l00434"></a>00434         r.choose(k).push( src, k, *<span class="keyword">this</span> );
-<a name="l00435"></a>00435     }
-<a name="l00436"></a>00436 
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439     <span class="keywordtype">bool</span> internal_try_pop( <span class="keywordtype">void</span>* dst ) ;
-<a name="l00440"></a>00440 
-<a name="l00442"></a>00442     size_t internal_size() <span class="keyword">const </span>;
-<a name="l00443"></a>00443 
-<a name="l00445"></a>00445     <span class="keywordtype">bool</span> internal_empty() <span class="keyword">const </span>;
-<a name="l00446"></a>00446 
-<a name="l00448"></a>00448     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
-<a name="l00449"></a>00449     <span class="keywordtype">void</span> internal_finish_clear() ;
-<a name="l00450"></a>00450 
-<a name="l00452"></a>00452     <span class="keywordtype">void</span> internal_throw_exception()<span class="keyword"> const </span>{
-<a name="l00453"></a>00453         <span class="keywordflow">throw</span> std::bad_alloc();
-<a name="l00454"></a>00454     }
-<a name="l00455"></a>00455 
-<a name="l00457"></a>00457     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
-<a name="l00458"></a>00458 };
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00461"></a>00461 concurrent_queue_base_v3<T>::concurrent_queue_base_v3( size_t item_size ) {
-<a name="l00462"></a>00462     my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);
-<a name="l00463"></a>00463     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00464"></a>00464     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00465"></a>00465     __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00466"></a>00466     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
-<a name="l00467"></a>00467     memset(my_rep,0,<span class="keyword">sizeof</span>(concurrent_queue_rep<T>));
-<a name="l00468"></a>00468     my_rep->item_size = item_size;
-<a name="l00469"></a>00469     my_rep->items_per_page = item_size<=8 ? 32 :
-<a name="l00470"></a>00470                              item_size<=16 ? 16 : 
-<a name="l00471"></a>00471                              item_size<=32 ? 8 :
-<a name="l00472"></a>00472                              item_size<=64 ? 4 :
-<a name="l00473"></a>00473                              item_size<=128 ? 2 :
-<a name="l00474"></a>00474                              1;
-<a name="l00475"></a>00475 }
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00478"></a>00478 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_try_pop( <span class="keywordtype">void</span>* dst ) {
-<a name="l00479"></a>00479     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00480"></a>00480     ticket k;
-<a name="l00481"></a>00481     <span class="keywordflow">do</span> {
-<a name="l00482"></a>00482         k = r.head_counter;
-<a name="l00483"></a>00483         <span class="keywordflow">for</span>(;;) {
-<a name="l00484"></a>00484             <span class="keywordflow">if</span>( r.tail_counter<=k ) {
-<a name="l00485"></a>00485                 <span class="comment">// Queue is empty </span>
-<a name="l00486"></a>00486                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00487"></a>00487             }
-<a name="l00488"></a>00488             <span class="comment">// Queue had item with ticket k when we looked.  Attempt to get that item.</span>
-<a name="l00489"></a>00489             ticket tk=k;
-<a name="l00490"></a>00490 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-<a name="l00491"></a>00491 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00492"></a>00492 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
-<a name="l00493"></a>00493 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00494"></a>00494 <span class="preprocessor"></span>            k = r.head_counter.compare_and_swap( tk+1, tk );
-<a name="l00495"></a>00495 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00498"></a>00498 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( k==tk )
-<a name="l00499"></a>00499                 <span class="keywordflow">break</span>;
-<a name="l00500"></a>00500             <span class="comment">// Another thread snatched the item, retry.</span>
-<a name="l00501"></a>00501         }
-<a name="l00502"></a>00502     } <span class="keywordflow">while</span>( !r.choose( k ).pop( dst, k, *<span class="keyword">this</span> ) );
-<a name="l00503"></a>00503     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00504"></a>00504 }
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00507"></a>00507 size_t concurrent_queue_base_v3<T>::internal_size()<span class="keyword"> const </span>{
-<a name="l00508"></a>00508     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00509"></a>00509     __TBB_ASSERT( <span class="keyword">sizeof</span>(ptrdiff_t)<=<span class="keyword">sizeof</span>(size_t), NULL );
-<a name="l00510"></a>00510     ticket hc = r.head_counter;
-<a name="l00511"></a>00511     size_t nie = r.n_invalid_entries;
-<a name="l00512"></a>00512     ticket tc = r.tail_counter;
-<a name="l00513"></a>00513     __TBB_ASSERT( hc!=tc || !nie, NULL );
-<a name="l00514"></a>00514     ptrdiff_t sz = tc-hc-nie;
-<a name="l00515"></a>00515     <span class="keywordflow">return</span> sz<0 ? 0 :  size_t(sz);
-<a name="l00516"></a>00516 }
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00519"></a>00519 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_empty()<span class="keyword"> const </span>{
-<a name="l00520"></a>00520     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00521"></a>00521     ticket tc = r.tail_counter;
-<a name="l00522"></a>00522     ticket hc = r.head_counter;
-<a name="l00523"></a>00523     <span class="comment">// if tc!=r.tail_counter, the queue was not empty at some point between the two reads.</span>
-<a name="l00524"></a>00524     <span class="keywordflow">return</span> tc==r.tail_counter && tc==hc+r.n_invalid_entries ;
-<a name="l00525"></a>00525 }
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00528"></a>00528 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::internal_finish_clear() {
-<a name="l00529"></a>00529     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00530"></a>00530     size_t nq = r.n_queue;
-<a name="l00531"></a>00531     <span class="keywordflow">for</span>( size_t i=0; i<nq; ++i ) {
-<a name="l00532"></a>00532         page* tp = r.array[i].tail_page;
-<a name="l00533"></a>00533         __TBB_ASSERT( r.array[i].head_page==tp, <span class="stringliteral">"at most one page should remain"</span> );
-<a name="l00534"></a>00534         <span class="keywordflow">if</span>( tp!=NULL) {
-<a name="l00535"></a>00535             <span class="keywordflow">if</span>( tp!=invalid_page ) deallocate_page( tp );
-<a name="l00536"></a>00536             r.array[i].tail_page = NULL;
-<a name="l00537"></a>00537         }
-<a name="l00538"></a>00538     }
-<a name="l00539"></a>00539 }
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00542"></a>00542 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) {
-<a name="l00543"></a>00543     concurrent_queue_rep<T>& r = *my_rep;
-<a name="l00544"></a>00544     r.items_per_page = src.my_rep->items_per_page;
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     <span class="comment">// copy concurrent_queue_rep.</span>
-<a name="l00547"></a>00547     r.head_counter = src.my_rep->head_counter;
-<a name="l00548"></a>00548     r.tail_counter = src.my_rep->tail_counter;
-<a name="l00549"></a>00549     r.n_invalid_entries = src.my_rep->n_invalid_entries;
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551     <span class="comment">// copy micro_queues</span>
-<a name="l00552"></a>00552     <span class="keywordflow">for</span>( size_t i = 0; i<r.n_queue; ++i )
-<a name="l00553"></a>00553         r.array[i].assign( src.my_rep->array[i], *<span class="keyword">this</span>);
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555     __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
-<a name="l00556"></a>00556             <span class="stringliteral">"the source concurrent queue should not be concurrently modified."</span> );
-<a name="l00557"></a>00557 }
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559 <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;
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00562"></a>00562 <span class="keyword">class </span>concurrent_queue_iterator_rep: no_assign {
-<a name="l00563"></a>00563 <span class="keyword">public</span>:
-<a name="l00564"></a>00564     ticket head_counter;
-<a name="l00565"></a>00565     <span class="keyword">const</span> concurrent_queue_base_v3<T>& my_queue;
-<a name="l00566"></a>00566     <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];
-<a name="l00567"></a>00567     concurrent_queue_iterator_rep( <span class="keyword">const</span> concurrent_queue_base_v3<T>& queue ) :
-<a name="l00568"></a>00568         head_counter(queue.my_rep->head_counter),
-<a name="l00569"></a>00569         my_queue(queue)
-<a name="l00570"></a>00570     {
-<a name="l00571"></a>00571         <span class="keywordflow">for</span>( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )
-<a name="l00572"></a>00572             array[k] = queue.my_rep->array[k].head_page;
-<a name="l00573"></a>00573     }
-<a name="l00574"></a>00574 
-<a name="l00576"></a>00576     <span class="keywordtype">bool</span> get_item( <span class="keywordtype">void</span>*& item, size_t k ) ;
-<a name="l00577"></a>00577 };
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00580"></a>00580 <span class="keywordtype">bool</span> concurrent_queue_iterator_rep<T>::get_item( <span class="keywordtype">void</span>*& item, size_t k ) {
-<a name="l00581"></a>00581     <span class="keywordflow">if</span>( k==my_queue.my_rep->tail_counter ) {
-<a name="l00582"></a>00582         item = NULL;
-<a name="l00583"></a>00583         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00584"></a>00584     } <span class="keywordflow">else</span> {
-<a name="l00585"></a>00585         <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];
-<a name="l00586"></a>00586         __TBB_ASSERT(p,NULL);
-<a name="l00587"></a>00587         size_t i = k/concurrent_queue_rep<T>::n_queue & (my_queue.my_rep->items_per_page-1);
-<a name="l00588"></a>00588         item = static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.my_rep->item_size*i;
-<a name="l00589"></a>00589         <span class="keywordflow">return</span> (p->mask & uintptr_t(1)<<i)!=0;
-<a name="l00590"></a>00590     }
-<a name="l00591"></a>00591 }
-<a name="l00592"></a>00592 
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00596"></a>00596 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 : no_assign {
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599     concurrent_queue_iterator_rep<Value>* my_rep;
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00602"></a>00602     <span class="keyword">friend</span> <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 );
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00605"></a>00605     <span class="keyword">friend</span> <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 );
-<a name="l00606"></a>00606 <span class="keyword">protected</span>:
-<a name="l00608"></a>00608     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610 <span class="keyword">public</span>:
-<a name="l00612"></a>00612     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
-<a name="l00613"></a>00613 <span class="preprocessor">#if __GNUC__==4&&__GNUC_MINOR__==3</span>
-<a name="l00614"></a>00614 <span class="preprocessor"></span>        <span class="comment">// to get around a possible gcc 4.3 bug</span>
-<a name="l00615"></a>00615         __asm__ __volatile__(<span class="stringliteral">""</span>: : :<span class="stringliteral">"memory"</span>);
-<a name="l00616"></a>00616 <span class="preprocessor">#endif</span>
-<a name="l00617"></a>00617 <span class="preprocessor"></span>    }
-<a name="l00618"></a>00618 
-<a name="l00620"></a>00620     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
-<a name="l00621"></a>00621         assign(i);
-<a name="l00622"></a>00622     }
-<a name="l00623"></a>00623 
-<a name="l00625"></a>00625     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) ;
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627 <span class="keyword">protected</span>:
-<a name="l00629"></a>00629     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) ;
-<a name="l00630"></a>00630 
-<a name="l00632"></a>00632     <span class="keywordtype">void</span> advance() ;
-<a name="l00633"></a>00633 
-<a name="l00635"></a>00635     ~concurrent_queue_iterator_base_v3() {
-<a name="l00636"></a>00636         cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
-<a name="l00637"></a>00637         my_rep = NULL;
-<a name="l00638"></a>00638     }
-<a name="l00639"></a>00639 };
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00642"></a>00642 concurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) {
-<a name="l00643"></a>00643     my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
-<a name="l00644"></a>00644     <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>(queue);
-<a name="l00645"></a>00645     size_t k = my_rep->head_counter;
-<a name="l00646"></a>00646     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
-<a name="l00647"></a>00647 }
-<a name="l00648"></a>00648 
-<a name="l00649"></a>00649 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00650"></a>00650 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) {
-<a name="l00651"></a>00651     <span class="keywordflow">if</span>( my_rep!=other.my_rep ) {
-<a name="l00652"></a>00652         <span class="keywordflow">if</span>( my_rep ) {
-<a name="l00653"></a>00653             cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
-<a name="l00654"></a>00654             my_rep = NULL;
-<a name="l00655"></a>00655         }
-<a name="l00656"></a>00656         <span class="keywordflow">if</span>( other.my_rep ) {
-<a name="l00657"></a>00657             my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
-<a name="l00658"></a>00658             <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );
-<a name="l00659"></a>00659         }
-<a name="l00660"></a>00660     }
-<a name="l00661"></a>00661     my_item = other.my_item;
-<a name="l00662"></a>00662 }
-<a name="l00663"></a>00663 
-<a name="l00664"></a>00664 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00665"></a>00665 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::advance() {
-<a name="l00666"></a>00666     __TBB_ASSERT( my_item, <span class="stringliteral">"attempt to increment iterator past end of queue"</span> );  
-<a name="l00667"></a>00667     size_t k = my_rep->head_counter;
-<a name="l00668"></a>00668     <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
-<a name="l00669"></a>00669 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00670"></a>00670 <span class="preprocessor"></span>    <span class="keywordtype">void</span>* tmp;
-<a name="l00671"></a>00671     my_rep->get_item(tmp,k);
-<a name="l00672"></a>00672     __TBB_ASSERT( my_item==tmp, NULL );
-<a name="l00673"></a>00673 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00674"></a>00674     size_t i = k/concurrent_queue_rep<Value>::n_queue & (queue.my_rep->items_per_page-1);
-<a name="l00675"></a>00675     <span class="keywordflow">if</span>( i==queue.my_rep->items_per_page-1 ) {
-<a name="l00676"></a>00676         <span class="keyword">typename</span> concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];
-<a name="l00677"></a>00677         root = root->next;
-<a name="l00678"></a>00678     }
-<a name="l00679"></a>00679     <span class="comment">// advance k</span>
-<a name="l00680"></a>00680     my_rep->head_counter = ++k;
-<a name="l00681"></a>00681     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
-<a name="l00682"></a>00682 }
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00685"></a>00685 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> concurrent_queue_iterator_base_v3<const T>& add_constness( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<T>& q )
-<a name="l00686"></a>00686 {
-<a name="l00687"></a>00687     <span class="keywordflow">return</span> *reinterpret_cast<const concurrent_queue_iterator_base_v3<const T> *>(&q) ;
-<a name="l00688"></a>00688 }
-<a name="l00689"></a>00689 
-<a name="l00691"></a>00691 
-<a name="l00693"></a>00693 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00694"></a>00694 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base_v3<Value>,
-<a name="l00695"></a>00695         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
-<a name="l00696"></a>00696 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00697"></a>00697 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00698"></a>00698     <span class="keyword">friend</span> class ::tbb::strict_ppl::concurrent_queue;
-<a name="l00699"></a>00699 <span class="preprocessor">#else</span>
-<a name="l00700"></a>00700 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00701"></a>00701 <span class="preprocessor">#endif </span>
-<a name="l00703"></a>00703 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :</span>
-<a name="l00704"></a>00704 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3<Value>(queue)
-<a name="l00705"></a>00705     {
-<a name="l00706"></a>00706     }
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708 <span class="keyword">public</span>:
-<a name="l00709"></a>00709     concurrent_queue_iterator() {}
-<a name="l00710"></a>00710 
-<a name="l00712"></a>00712     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,Value>& other ) :
-<a name="l00713"></a>00713         concurrent_queue_iterator_base_v3<Value>(other)
-<a name="l00714"></a>00714     {
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00718"></a>00718     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,T>& other ) :
-<a name="l00719"></a>00719         concurrent_queue_iterator_base_v3<Value>(add_constness(other))
-<a name="l00720"></a>00720     {
-<a name="l00721"></a>00721     }
-<a name="l00722"></a>00722 
-<a name="l00724"></a>00724     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
-<a name="l00725"></a>00725         assign(other);
-<a name="l00726"></a>00726         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00727"></a>00727     }
-<a name="l00728"></a>00728 
-<a name="l00730"></a>00730     Value& operator*()<span class="keyword"> const </span>{
-<a name="l00731"></a>00731         <span class="keywordflow">return</span> *static_cast<Value*>(this->my_item);
-<a name="l00732"></a>00732     }
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00735"></a>00735 
-<a name="l00737"></a>00737     concurrent_queue_iterator& operator++() {
-<a name="l00738"></a>00738         this->advance();
-<a name="l00739"></a>00739         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00740"></a>00740     }
-<a name="l00741"></a>00741 
-<a name="l00743"></a>00743     Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00744"></a>00744         Value* result = &operator*();
-<a name="l00745"></a>00745         operator++();
-<a name="l00746"></a>00746         <span class="keywordflow">return</span> result;
-<a name="l00747"></a>00747     }
-<a name="l00748"></a>00748 }; <span class="comment">// concurrent_queue_iterator</span>
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00752"></a>00752 <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 ) {
-<a name="l00753"></a>00753     <span class="keywordflow">return</span> i.my_item==j.my_item;
-<a name="l00754"></a>00754 }
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00757"></a>00757 <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 ) {
-<a name="l00758"></a>00758     <span class="keywordflow">return</span> i.my_item!=j.my_item;
-<a name="l00759"></a>00759 }
-<a name="l00760"></a>00760 
-<a name="l00761"></a>00761 } <span class="comment">// namespace internal</span>
-<a name="l00762"></a>00762 
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00766"></a>00766 
-<a name="l00768"></a>00768 <span class="keyword">namespace </span>internal {
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770 <span class="keyword">class </span>concurrent_queue_rep;
-<a name="l00771"></a>00771 <span class="keyword">class </span>concurrent_queue_iterator_rep;
-<a name="l00772"></a>00772 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00773"></a>00773 <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;
-<a name="l00774"></a>00774 
-<a name="l00776"></a>00776 
-<a name="l00778"></a>00778 <span class="keyword">class </span>concurrent_queue_base_v3: no_copy {
-<a name="l00780"></a>00780     concurrent_queue_rep* my_rep;
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
-<a name="l00783"></a>00783     <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
-<a name="l00784"></a>00784     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
-<a name="l00785"></a>00785     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
-<a name="l00786"></a>00786     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-<a name="l00787"></a>00787 <span class="keyword">protected</span>:
-<a name="l00789"></a>00789     <span class="keyword">struct </span>page {
-<a name="l00790"></a>00790         page* next;
-<a name="l00791"></a>00791         uintptr_t mask; 
-<a name="l00792"></a>00792     };
-<a name="l00793"></a>00793 
-<a name="l00795"></a>00795     ptrdiff_t my_capacity;
-<a name="l00796"></a>00796    
-<a name="l00798"></a>00798     size_t items_per_page;
-<a name="l00799"></a>00799 
-<a name="l00801"></a>00801     size_t item_size;
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803 <span class="keyword">private</span>:
-<a name="l00804"></a>00804     <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 ) = 0;
-<a name="l00805"></a>00805     <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 ) = 0;
-<a name="l00806"></a>00806 <span class="keyword">protected</span>:
-<a name="l00807"></a>00807     __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
-<a name="l00808"></a>00808     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
-<a name="l00809"></a>00809 
-<a name="l00811"></a>00811     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00812"></a>00812 
-<a name="l00814"></a>00814     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
-<a name="l00815"></a>00815 
-<a name="l00817"></a>00817     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00818"></a>00818 
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
-<a name="l00822"></a>00822 
-<a name="l00824"></a>00824     ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
-<a name="l00825"></a>00825 
-<a name="l00827"></a>00827     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_empty() <span class="keyword">const</span>;
-<a name="l00828"></a>00828 
-<a name="l00830"></a>00830     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
-<a name="l00831"></a>00831 
-<a name="l00833"></a>00833     <span class="keyword">virtual</span> page *allocate_page() = 0;
-<a name="l00834"></a>00834 
-<a name="l00836"></a>00836     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) = 0;
-<a name="l00837"></a>00837 
-<a name="l00839"></a>00839     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
-<a name="l00840"></a>00840     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
-<a name="l00841"></a>00841 
-<a name="l00843"></a>00843     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
-<a name="l00844"></a>00844 
-<a name="l00846"></a>00846     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848 <span class="keyword">private</span>:
-<a name="l00849"></a>00849     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) = 0;
-<a name="l00850"></a>00850 };
-<a name="l00851"></a>00851 
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 {
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857     concurrent_queue_iterator_rep* my_rep;
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00860"></a>00860     <span class="keyword">friend</span> <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 );
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00863"></a>00863     <span class="keyword">friend</span> <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 );
-<a name="l00864"></a>00864 <span class="keyword">protected</span>:
-<a name="l00866"></a>00866     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
-<a name="l00867"></a>00867 
-<a name="l00869"></a>00869     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
-<a name="l00870"></a>00870 
-<a name="l00872"></a>00872     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
-<a name="l00873"></a>00873         assign(i);
-<a name="l00874"></a>00874     }
-<a name="l00875"></a>00875 
-<a name="l00877"></a>00877     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue );
-<a name="l00878"></a>00878 
-<a name="l00880"></a>00880     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i );
-<a name="l00881"></a>00881 
-<a name="l00883"></a>00883     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
-<a name="l00884"></a>00884 
-<a name="l00886"></a>00886     __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
-<a name="l00887"></a>00887 };
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
-<a name="l00890"></a>00890 
-<a name="l00892"></a>00892 
-<a name="l00894"></a>00894 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00895"></a>00895 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base,
-<a name="l00896"></a>00896         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
-<a name="l00897"></a>00897 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00898"></a>00898 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00899"></a>00899     <span class="keyword">friend</span> class ::tbb::concurrent_bounded_queue;
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00902"></a>00902     <span class="keyword">friend</span> class ::tbb::deprecated::concurrent_queue;
-<a name="l00903"></a>00903 <span class="preprocessor">#else</span>
-<a name="l00904"></a>00904 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00905"></a>00905 <span class="preprocessor">#endif </span>
-<a name="l00907"></a>00907 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :</span>
-<a name="l00908"></a>00908 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3(queue)
-<a name="l00909"></a>00909     {
-<a name="l00910"></a>00910     }
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912 <span class="keyword">public</span>:
-<a name="l00913"></a>00913     concurrent_queue_iterator() {}
-<a name="l00914"></a>00914 
-<a name="l00917"></a>00917     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00918"></a>00918         concurrent_queue_iterator_base_v3(other)
-<a name="l00919"></a>00919     {}
-<a name="l00920"></a>00920 
-<a name="l00922"></a>00922     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
-<a name="l00923"></a>00923         assign(other);
-<a name="l00924"></a>00924         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00925"></a>00925     }
-<a name="l00926"></a>00926 
-<a name="l00928"></a>00928     Value& operator*()<span class="keyword"> const </span>{
-<a name="l00929"></a>00929         <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
-<a name="l00930"></a>00930     }
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00933"></a>00933 
-<a name="l00935"></a>00935     concurrent_queue_iterator& operator++() {
-<a name="l00936"></a>00936         advance();
-<a name="l00937"></a>00937         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00938"></a>00938     }
-<a name="l00939"></a>00939 
-<a name="l00941"></a>00941     Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00942"></a>00942         Value* result = &operator*();
-<a name="l00943"></a>00943         operator++();
-<a name="l00944"></a>00944         <span class="keywordflow">return</span> result;
-<a name="l00945"></a>00945     }
-<a name="l00946"></a>00946 }; <span class="comment">// concurrent_queue_iterator</span>
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00950"></a>00950 <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 ) {
-<a name="l00951"></a>00951     <span class="keywordflow">return</span> i.my_item==j.my_item;
-<a name="l00952"></a>00952 }
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00955"></a>00955 <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 ) {
-<a name="l00956"></a>00956     <span class="keywordflow">return</span> i.my_item!=j.my_item;
-<a name="l00957"></a>00957 }
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959 } <span class="comment">// namespace internal;</span>
-<a name="l00960"></a>00960 
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963 } <span class="comment">// namespace tbb</span>
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_internal_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/a00232.html b/doc/html/a00240.html
similarity index 90%
rename from doc/html/a00232.html
rename to doc/html/a00240.html
index 5b2f1bd..7267c7c 100644
--- a/doc/html/a00232.html
+++ b/doc/html/a00240.html
@@ -20,33 +20,33 @@
     <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00232.html">strict_ppl</a></div>
+<a class="el" href="a00237.html">tbb</a>::<a class="el" href="a00240.html">strict_ppl</a></div>
 <h1>tbb::strict_ppl Namespace Reference</h1>For internal use only.  
 <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="a00134.html">concurrent_queue</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">concurrent_queue</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00139.html#_details">More...</a><br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15c764c70c8a32e7a4b8c291d0cc8dde"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="15c764c70c8a32e7a4b8c291d0cc8dde" args="(Index first, Index last, Index step, const Function &f)" -->
 template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#15c764c70c8a32e7a4b8c291d0cc8dde">parallel_for</a> (Index first, Index last, Index step, const Function &f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00240.html#15c764c70c8a32e7a4b8c291d0cc8dde">parallel_for</a> (Index first, Index last, Index step, const Function &f)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a step provided. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb5925ad98ec9608139661cfd2b9b88f"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="fb5925ad98ec9608139661cfd2b9b88f" args="(Index first, Index last, Index step, const Function &f, tbb::task_group_context &context)" -->
 template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, Index step, const Function &f, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, Index step, const Function &f, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="490399525b1e690ec31d6db964c6b272"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="490399525b1e690ec31d6db964c6b272" args="(Index first, Index last, const Function &f)" -->
 template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#490399525b1e690ec31d6db964c6b272">parallel_for</a> (Index first, Index last, const Function &f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00240.html#490399525b1e690ec31d6db964c6b272">parallel_for</a> (Index first, Index last, const Function &f)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range of integers with a default step value. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="bda0b331c88a836cb756fff0f661d609"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="bda0b331c88a836cb756fff0f661d609" args="(Index first, Index last, const Function &f, tbb::task_group_context &context)" -->
 template<typename Index, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, const Function &f, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, const Function &f, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
diff --git a/doc/html/a00233.html b/doc/html/a00241.html
similarity index 73%
rename from doc/html/a00233.html
rename to doc/html/a00241.html
index ccf2f4c..4835d63 100644
--- a/doc/html/a00233.html
+++ b/doc/html/a00241.html
@@ -17,279 +17,279 @@
 <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="a00122.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="a00127.html">tbb::blocked_range< Value ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00122.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.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="a00127.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.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="a00123.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.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="a00128.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.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="a00124.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="a00151.html">tbb::pre_scan_tag</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00129.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="a00159.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="a00151.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="a00140.html">tbb::final_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="a00159.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="a00145.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="a00140.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">tbb::parallel_while< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00145.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.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="a00149.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb::simple_partitioner</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00157.html#_details">More...</a><br></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::simple_partitioner</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00160.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">tbb::auto_partitioner</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <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="a00125.html">tbb::auto_partitioner</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00120.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::filter</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00125.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">tbb::filter</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00139.html#_details">More...</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::thread_bound_filter</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00144.html#_details">More...</a><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::thread_bound_filter</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00175.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">tbb::pipeline</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline served by a user thread.  <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"><a class="el" href="a00158.html">tbb::pipeline</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00150.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">tbb::split</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00158.html#_details">More...</a><br></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::split</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00165.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00173.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="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="algorithms::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &body)" -->
 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="a00233.html#g3383e2703977012b6f384d673410f1f7">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="a00241.html#g3383e2703977012b6f384d673410f1f7">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="g2617dc9b88b3285a7212599d49f74228"></a><!-- doxytag: member="algorithms::parallel_do" ref="g2617dc9b88b3285a7212599d49f74228" args="(Iterator first, Iterator last, const Body &body, task_group_context &context)" -->
 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="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g2617dc9b88b3285a7212599d49f74228">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="g68cc046ef72c42ce205fccbc435a0d81"></a><!-- doxytag: member="algorithms::parallel_for" ref="g68cc046ef72c42ce205fccbc435a0d81" args="(const Range &range, const Body &body)" -->
 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="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a> (const Range &range, 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="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a> (const Range &range, const Body &body)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with default partitioner. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g13cac5dd55c7533bccea43a51c33d0e5"></a><!-- doxytag: member="algorithms::parallel_for" ref="g13cac5dd55c7533bccea43a51c33d0e5" args="(const Range &range, const Body &body, const simple_partitioner &partitioner)" -->
 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="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g13cac5dd55c7533bccea43a51c33d0e5">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7ac75d532389b55b9247f3fdb0b00d1"></a><!-- doxytag: member="algorithms::parallel_for" ref="ga7ac75d532389b55b9247f3fdb0b00d1" args="(const Range &range, const Body &body, const auto_partitioner &partitioner)" -->
 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="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">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="a00241.html#ga7ac75d532389b55b9247f3fdb0b00d1">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="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g9cd1b210ceb1c040f30e390b4a21bde8"></a><!-- doxytag: member="algorithms::parallel_for" ref="g9cd1b210ceb1c040f30e390b4a21bde8" args="(const Range &range, const Body &body, affinity_partitioner &partitioner)" -->
 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="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">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="a00241.html#g9cd1b210ceb1c040f30e390b4a21bde8">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="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2d317a5e0078cd193125439fed60dfdc"></a><!-- doxytag: member="algorithms::parallel_for" ref="g2d317a5e0078cd193125439fed60dfdc" args="(const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g2d317a5e0078cd193125439fed60dfdc">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g2d317a5e0078cd193125439fed60dfdc">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="g1c0700e3f85e83a788ff3ede88ebb7e9"></a><!-- doxytag: member="algorithms::parallel_for" ref="g1c0700e3f85e83a788ff3ede88ebb7e9" args="(const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g1c0700e3f85e83a788ff3ede88ebb7e9">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="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g04b4696b67370c01353ff5974c8f1196"></a><!-- doxytag: member="algorithms::parallel_for" ref="g04b4696b67370c01353ff5974c8f1196" args="(const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g04b4696b67370c01353ff5974c8f1196">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="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
 <tr><td colspan="2"><br><h2>parallel_for_each</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbcb40499f038fd82deca88366b404790"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="gbcb40499f038fd82deca88366b404790" args="(InputIterator first, InputIterator last, Function f, task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gcd40c32f319747e61a8f73fcfc452001"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="gcd40c32f319747e61a8f73fcfc452001" args="(InputIterator first, InputIterator last, const Function &f, task_group_context &context)" -->
 template<typename InputIterator, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbcb40499f038fd82deca88366b404790">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, Function f, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gcd40c32f319747e61a8f73fcfc452001">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, task_group_context &context)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g85a58ff0853f129adb6f9e4355326ccc"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="g85a58ff0853f129adb6f9e4355326ccc" args="(InputIterator first, InputIterator last, Function f)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc2d710ca573f0a9bd94379cba3772def"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="gc2d710ca573f0a9bd94379cba3772def" args="(InputIterator first, InputIterator last, const Function &f)" -->
 template<typename InputIterator, typename Function> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, Function f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gc2d710ca573f0a9bd94379cba3772def">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Uses default context. <br></td></tr>
 <tr><td colspan="2"><br><h2>parallel_invoke</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbaadafdb93d290acec86e07fc8909c29"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gbaadafdb93d290acec86e07fc8909c29" args="(F0 f0, F1 f1, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd3e2998f171494f94c2103f4eb924084"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd3e2998f171494f94c2103f4eb924084" args="(const F0 &f0, const F1 &f1, tbb::task_group_context &context)" -->
 template<typename F0, typename F1> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb::parallel_invoke</a> (F0 f0, F1 f1, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">tbb::parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3cbf43007d0caeb4a2470265f50b25df"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3cbf43007d0caeb4a2470265f50b25df" args="(F0 f0, F1 f1, F2 f2, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g4eb73562e4145c8343ed9f996267f039"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g4eb73562e4145c8343ed9f996267f039" args="(const F0 &f0, const F1 &f1, const F2 &f2, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g063924a497ba64c49351e80e39bd2c17"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g063924a497ba64c49351e80e39bd2c17" args="(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd1335c4b54fbf8d3f5be6a5c255c8c60"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd1335c4b54fbf8d3f5be6a5c255c8c60" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2ca8b49b9b36515247e45ffd9c0c11cf"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g2ca8b49b9b36515247e45ffd9c0c11cf" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g40b88e3db7ecb09cbfe0230ea1c24030"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g40b88e3db7ecb09cbfe0230ea1c24030" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g559685c3c13e103c6d570efef419c2b9"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g559685c3c13e103c6d570efef419c2b9" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g98a8b388f7e0b7621a964a8c23752d1d"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g98a8b388f7e0b7621a964a8c23752d1d" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd979d007cc4026c34691a4b38edd36af"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd979d007cc4026c34691a4b38edd36af" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb95f31638bdde9d909361ad2e96a93eb"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb95f31638bdde9d909361ad2e96a93eb" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd01a5d8f4902387d9081352e1edd1632"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd01a5d8f4902387d9081352e1edd1632" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1655b24786f010ee0a008907a07bb61d"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g1655b24786f010ee0a008907a07bb61d" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bfc0ac0691dfa71d230f5c8c3e96"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g0a66bfc0ac0691dfa71d230f5c8c3e96" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g105220f1c95f9888b696a3e47027527b"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g105220f1c95f9888b696a3e47027527b" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g7182f6b5c88469cfc2b7c2ebbbd4a28c"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g7182f6b5c88469cfc2b7c2ebbbd4a28c" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context &context)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1ef1774e0fcc4f632fe0af2591781c4c"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g1ef1774e0fcc4f632fe0af2591781c4c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, tbb::task_group_context &context)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="el" href="a00167.html">tbb::task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, <a class="el" href="a00175.html">tbb::task_group_context</a> &context)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb999ec5f8b7f0b68b9752f11ad39ab08"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb999ec5f8b7f0b68b9752f11ad39ab08" args="(F0 f0, F1 f1)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ge832d8ad8b246c884e3c897ed63f8216"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="ge832d8ad8b246c884e3c897ed63f8216" args="(const F0 &f0, const F1 &f1)" -->
 template<typename F0, typename F1> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd" args="(F0 f0, F1 f1, F2 f2)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb91fec4e7ba49754ad583ccb127afc66"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb91fec4e7ba49754ad583ccb127afc66" args="(const F0 &f0, const F1 &f1, const F2 &f2)" -->
 template<typename F0, typename F1, typename F2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g89c0569d95abd182f80acc38d0dbe2d4"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g89c0569d95abd182f80acc38d0dbe2d4" args="(F0 f0, F1 f1, F2 f2, F3 f3)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g421d0f66ee69eea134a35d1ae371d8d6"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g421d0f66ee69eea134a35d1ae371d8d6" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)" -->
 template<typename F0, typename F1, typename F2, typename F3> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3ef71e9441745fe708e66a0b817bebc7"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3ef71e9441745fe708e66a0b817bebc7" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g8aacce74d691b4f44a0f7becadd9578c"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g8aacce74d691b4f44a0f7becadd9578c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g78fa19efd1a7cf7ffd1c23251c80b31d"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g78fa19efd1a7cf7ffd1c23251c80b31d" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g8cc6994f7cd6eaf25feb5d7cc04a2e64"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g8cc6994f7cd6eaf25feb5d7cc04a2e64" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gab2e69dbef9b3f0e658cf4b8e574f552"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gab2e69dbef9b3f0e658cf4b8e574f552" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g995ba9583ae24bddb8bd9a599cc8b4c7"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g995ba9583ae24bddb8bd9a599cc8b4c7" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g262f0347e5690bb692b6dc26e26b9ebe"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g262f0347e5690bb692b6dc26e26b9ebe" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g34341a4c24c6f548886cd14077374c5c"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g34341a4c24c6f548886cd14077374c5c" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g06a090fbd0eaaccf20e2409a2a222733"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g06a090fbd0eaaccf20e2409a2a222733" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2a11342753488d460866d48370a69517"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g2a11342753488d460866d48370a69517" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3330e3c33053875705e19e29eda37627"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3330e3c33053875705e19e29eda37627" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)" -->
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gffcf6835ceee43455f310352a3b4faa5"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gffcf6835ceee43455f310352a3b4faa5" args="(const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)" -->
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)</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="g1b3d59c5eb62683c5754db6970392fa3"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g1b3d59c5eb62683c5754db6970392fa3" args="(const Range &range, Body &body)" -->
 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="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">tbb::parallel_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">tbb::parallel_reduce</a> (const Range &range, Body &body)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gec1b7c03f9da909bef5db12e3d41bed3"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gec1b7c03f9da909bef5db12e3d41bed3" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
 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="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gec1b7c03f9da909bef5db12e3d41bed3">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18a19157e6245992fc00ca0adeb7dd37"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g18a19157e6245992fc00ca0adeb7dd37" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
 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="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">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="a00241.html#g18a19157e6245992fc00ca0adeb7dd37">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="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc61e73fcc36c92d79a217fc355ff4a6b"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gc61e73fcc36c92d79a217fc355ff4a6b" args="(const Range &range, Body &body, affinity_partitioner &partitioner)" -->
 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="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">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="a00241.html#gc61e73fcc36c92d79a217fc355ff4a6b">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="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g45cb00c42a18e334bbde8b7535afe460"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g45cb00c42a18e334bbde8b7535afe460" args="(const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g45cb00c42a18e334bbde8b7535afe460">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g45cb00c42a18e334bbde8b7535afe460">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, simple partitioner and user-supplied context. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1c1ea1d7c61b3c225e92c70d669a53a5"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g1c1ea1d7c61b3c225e92c70d669a53a5" args="(const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g1c1ea1d7c61b3c225e92c70d669a53a5">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="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd9ac3a3811060314695f33b703c6e11b"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gd9ac3a3811060314695f33b703c6e11b" args="(const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#gd9ac3a3811060314695f33b703c6e11b">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gd9ac3a3811060314695f33b703c6e11b">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="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9412e09fb01fcad8c018ea9cffb28ef"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gc9412e09fb01fcad8c018ea9cffb28ef" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)" -->
 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="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gc9412e09fb01fcad8c018ea9cffb28ef">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gaddffeec0e892ac3d6fc7fc2053e1eca"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gaddffeec0e892ac3d6fc7fc2053e1eca" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)" -->
 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="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaddffeec0e892ac3d6fc7fc2053e1eca">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb175401f0729e40dd2c5860a17c14385"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gb175401f0729e40dd2c5860a17c14385" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)" -->
 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="a00233.html#gb175401f0729e40dd2c5860a17c14385">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="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gb175401f0729e40dd2c5860a17c14385">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="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00125.html">auto_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7f1f1828ae2b330ce05b8513a495154"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gb7f1f1828ae2b330ce05b8513a495154" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)" -->
 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="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">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="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gb7f1f1828ae2b330ce05b8513a495154">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="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">affinity_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfbc0cc2026d87f11a96bcd62788f5bb5"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gfbc0cc2026d87f11a96bcd62788f5bb5" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">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="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gfbc0cc2026d87f11a96bcd62788f5bb5">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="g630c90a399937d9d4ae70ff883186dfd"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g630c90a399937d9d4ae70ff883186dfd" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g630c90a399937d9d4ae70ff883186dfd">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="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g630c90a399937d9d4ae70ff883186dfd">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="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00125.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g496bd7eadb3b97495ccb5655ef90319e"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g496bd7eadb3b97495ccb5655ef90319e" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)" -->
 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="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">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="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#g496bd7eadb3b97495ccb5655ef90319e">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="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.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="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="algorithms::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &range, Body &body)" -->
 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="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">tbb::parallel_scan</a> (const Range &range, Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">tbb::parallel_scan</a> (const Range &range, Body &body)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with default partitioner. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9fac8870b2e6365fb337014404529df"></a><!-- doxytag: member="algorithms::parallel_scan" ref="gc9fac8870b2e6365fb337014404529df" args="(const Range &range, Body &body, const simple_partitioner &partitioner)" -->
 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="a00233.html#gc9fac8870b2e6365fb337014404529df">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gc9fac8870b2e6365fb337014404529df">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00168.html">simple_partitioner</a>. <br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g62fde400a37bbca1a2fddc8e3d22f556"></a><!-- doxytag: member="algorithms::parallel_scan" ref="g62fde400a37bbca1a2fddc8e3d22f556" args="(const Range &range, Body &body, const auto_partitioner &partitioner)" -->
 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="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">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="a00241.html#g62fde400a37bbca1a2fddc8e3d22f556">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="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00125.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="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">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="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">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="#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></td></tr>
 <tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g16c3eb77d0e530834c51ce3857f01012"></a><!-- doxytag: member="algorithms::parallel_sort" ref="g16c3eb77d0e530834c51ce3857f01012" args="(RandomAccessIterator begin, RandomAccessIterator end)" -->
 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="a00233.html#g16c3eb77d0e530834c51ce3857f01012">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="a00241.html#g16c3eb77d0e530834c51ce3857f01012">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="gc7576f82fdedc8a701a6c17ad9415926"></a><!-- doxytag: member="algorithms::parallel_sort" ref="gc7576f82fdedc8a701a6c17ad9415926" args="(T *begin, T *end)" -->
 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="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">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="a00241.html#gc7576f82fdedc8a701a6c17ad9415926">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>
 </table>
diff --git a/doc/html/a00234.html b/doc/html/a00242.html
similarity index 79%
rename from doc/html/a00234.html
rename to doc/html/a00242.html
index 4147d05..9b8899a 100644
--- a/doc/html/a00234.html
+++ b/doc/html/a00242.html
@@ -17,24 +17,24 @@
 <h1>Containers</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="a00128.html">tbb::combinable< T ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">tbb::combinable< T ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00128.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00133.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00130.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T.  <a href="a00135.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00139.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00129.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00135.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00140.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00136.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00141.html#_details">More...</a><br></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00235.html b/doc/html/a00243.html
similarity index 88%
rename from doc/html/a00235.html
rename to doc/html/a00243.html
index 6e23d97..f0bc545 100644
--- a/doc/html/a00235.html
+++ b/doc/html/a00243.html
@@ -17,51 +17,51 @@
 <h1>Memory Allocation</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="a00116.html">tbb::aligned_space< T, N ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.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="a00116.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></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="a00121.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.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="a00125.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">tbb::cache_aligned_allocator< void ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00130.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.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="a00126.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">tbb::scalable_allocator< T ></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="a00131.html#_details">More...</a><br></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::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="a00158.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb::scalable_allocator< void ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00166.html#_details">More...</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::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="a00159.html#_details">More...</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::tbb_allocator< T ></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="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="a00178.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="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::tbb_allocator< void ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00178.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.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="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="a00179.html">tbb::zero_allocator< T, Allocator ></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="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="a00186.html">tbb::zero_allocator< T, Allocator ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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="a00180.html">tbb::zero_allocator< void, Allocator ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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="a00187.html">tbb::zero_allocator< void, Allocator ></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="a00180.html#_details">More...</a><br></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="a00187.html#_details">More...</a><br></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="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">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="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">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="a00235.html#gca3579c21244dba9f0c351e5984d4565">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="a00243.html#gca3579c21244dba9f0c351e5984d4565">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="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">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="a00243.html#g951bbbbd2d041acb59ba5fa910b52543">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="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, 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="a00243.html#g3f5a2fde0bcaa3eda35be32c8658f444">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="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (void **memptr, size_t alignment, 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="a00243.html#g05dcec987480bb2c82ecdead6a085899">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="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">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="a00243.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">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="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">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="a00243.html#gbaea91376be80dfabd7c93eaffd9abaa">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="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_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="a00243.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (void *ptr)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
 
 </table>
 <hr><h2>Function Documentation</h2>
diff --git a/doc/html/a00236.html b/doc/html/a00244.html
similarity index 75%
rename from doc/html/a00236.html
rename to doc/html/a00244.html
index 288916d..67deb90 100644
--- a/doc/html/a00236.html
+++ b/doc/html/a00244.html
@@ -17,33 +17,33 @@
 <h1>Synchronization</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">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">tbb::atomic< T ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">tbb::atomic< T ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00117.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">tbb::mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00122.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.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="a00142.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">tbb::null_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00150.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">tbb::null_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00144.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00152.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb::null_rw_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00146.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">tbb::queuing_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00154.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb::queuing_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00152.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00160.html#_details">More...</a><br></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::queuing_rw_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00154.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">tbb::recursive_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <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="a00164.html">tbb::recursive_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00156.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">tbb::spin_mutex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00164.html#_details">More...</a><br></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::spin_mutex</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00161.html#_details">More...</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::spin_rw_mutex_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <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="a00171.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="a00163.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00171.html#_details">More...</a><br></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00237.html b/doc/html/a00245.html
similarity index 92%
copy from doc/html/a00237.html
copy to doc/html/a00245.html
index 9f15f5e..26e71fa 100644
--- a/doc/html/a00237.html
+++ b/doc/html/a00245.html
@@ -17,9 +17,9 @@
 <h1>Timing</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="a00176.html">tbb::tick_count</a></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::tick_count</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00176.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00183.html#_details">More...</a><br></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00238.html b/doc/html/a00246.html
similarity index 79%
rename from doc/html/a00238.html
rename to doc/html/a00246.html
index cb17f55..8957db5 100644
--- a/doc/html/a00238.html
+++ b/doc/html/a00246.html
@@ -17,21 +17,21 @@
 <h1>Task Scheduling</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="a00167.html">tbb::task_group_context</a></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::task_group_context</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <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="a00166.html">tbb::task</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00175.html#_details">More...</a><br></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::task</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00166.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">tbb::empty_task</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <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="a00142.html">tbb::empty_task</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00137.html#_details">More...</a><br></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::task_list</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00142.html#_details">More...</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::task_list</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <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="a00169.html">tbb::task_scheduler_init</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <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="a00177.html">tbb::task_scheduler_init</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler.  <a href="a00169.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler.  <a href="a00177.html#_details">More...</a><br></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00247.html b/doc/html/a00247.html
new file mode 100644
index 0000000..c02ba00
--- /dev/null
+++ b/doc/html/a00247.html
@@ -0,0 +1,921 @@
+<!DOCTYPE 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_internal.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>_concurrent_queue_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_internal_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_internal_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <iterator></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <new></span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a><a class="code" href="a00237.html">00033</a> <span class="keyword">namespace </span>tbb {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="comment">// forward declaration</span>
+<a name="l00038"></a><a class="code" href="a00240.html">00038</a> <span class="keyword">namespace </span>strict_ppl {
+<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00139.html">concurrent_queue</a>;
+<a name="l00040"></a>00040 }
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_bounded_queue</a>;
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>deprecated {
+<a name="l00045"></a>00045 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A> <span class="keyword">class </span><a class="code" href="a00139.html">concurrent_queue</a>;
+<a name="l00046"></a>00046 }
+<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053 <span class="keyword">namespace </span>internal {
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="keyword">typedef</span> size_t ticket;
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue ;
+<a name="l00060"></a>00060 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00061"></a>00061 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00062"></a>00062 
+<a name="l00064"></a>00064 
+<a name="l00067"></a>00067 <span class="keyword">struct </span>concurrent_queue_rep_base : no_copy {
+<a name="l00068"></a>00068     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue;
+<a name="l00069"></a>00069     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 <span class="keyword">protected</span>:
+<a name="l00073"></a>00073     <span class="keyword">static</span> <span class="keyword">const</span> size_t phi = 3;
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075 <span class="keyword">public</span>:
+<a name="l00076"></a>00076     <span class="comment">// must be power of 2</span>
+<a name="l00077"></a>00077     <span class="keyword">static</span> <span class="keyword">const</span> size_t n_queue = 8;
+<a name="l00078"></a>00078 
+<a name="l00080"></a>00080     <span class="keyword">struct </span>page {
+<a name="l00081"></a>00081         page* next;
+<a name="l00082"></a>00082         uintptr_t mask; 
+<a name="l00083"></a>00083     };
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085     atomic<ticket> head_counter;
+<a name="l00086"></a>00086     <span class="keywordtype">char</span> pad1[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
+<a name="l00087"></a>00087     atomic<ticket> tail_counter;
+<a name="l00088"></a>00088     <span class="keywordtype">char</span> pad2[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic<ticket>)];
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091     size_t items_per_page;
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094     size_t item_size;
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097     atomic<size_t> n_invalid_entries;
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099     <span class="keywordtype">char</span> pad3[NFS_MaxLineSize-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(atomic<size_t>)];
+<a name="l00100"></a>00100 } ;
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102 <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_valid_page(<span class="keyword">const</span> concurrent_queue_rep_base::page* p) {
+<a name="l00103"></a>00103     <span class="keywordflow">return</span> uintptr_t(p)>1;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107 
+<a name="l00110"></a>00110 <span class="keyword">class </span>concurrent_queue_page_allocator
+<a name="l00111"></a>00111 {
+<a name="l00112"></a>00112     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue ;
+<a name="l00113"></a>00113     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00114"></a>00114 <span class="keyword">protected</span>:
+<a name="l00115"></a>00115     <span class="keyword">virtual</span> ~concurrent_queue_page_allocator() {}
+<a name="l00116"></a>00116 <span class="keyword">private</span>:
+<a name="l00117"></a>00117     <span class="keyword">virtual</span> concurrent_queue_rep_base::page* allocate_page() = 0;
+<a name="l00118"></a>00118     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
+<a name="l00119"></a>00119 } ;
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="comment">// unary minus operator applied to unsigned type, result still unsigned</span>
+<a name="l00123"></a>00123 <span class="preprocessor">#pragma warning( push )</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( disable: 4146 )</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>
+<a name="l00128"></a>00128 
+<a name="l00130"></a>00130 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00131"></a>00131 <span class="keyword">class </span>micro_queue : no_copy {
+<a name="l00132"></a>00132     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135     <span class="keyword">class </span>destroyer: no_copy {
+<a name="l00136"></a>00136         T& my_value;
+<a name="l00137"></a>00137     <span class="keyword">public</span>:
+<a name="l00138"></a>00138         destroyer( T& value ) : my_value(value) {}
+<a name="l00139"></a>00139         ~destroyer() {my_value.~T();}          
+<a name="l00140"></a>00140     };
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     T& get_ref( page& page, size_t index ) {
+<a name="l00143"></a>00143         <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
+<a name="l00144"></a>00144     }
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146     <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00147"></a>00147         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+<a name="l00148"></a>00148     }
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     <span class="keywordtype">void</span> copy_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
+<a name="l00151"></a>00151         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+<a name="l00152"></a>00152     }
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
+<a name="l00155"></a>00155         T& from = get_ref(src,index);
+<a name="l00156"></a>00156         destroyer d(from);
+<a name="l00157"></a>00157         *static_cast<T*>(dst) = from;
+<a name="l00158"></a>00158     }
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160     <span class="keywordtype">void</span> spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) <span class="keyword">const </span>;
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162 <span class="keyword">public</span>:
+<a name="l00163"></a>00163     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer<T>;
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     atomic<page*> head_page;
+<a name="l00166"></a>00166     atomic<ticket> head_counter;
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168     atomic<page*> tail_page;
+<a name="l00169"></a>00169     atomic<ticket> tail_counter;
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171     spin_mutex page_mutex;
+<a name="l00172"></a>00172     
+<a name="l00173"></a>00173     <span class="keywordtype">void</span> push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175     <span class="keywordtype">bool</span> pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     micro_queue& assign( <span class="keyword">const</span> micro_queue& src, concurrent_queue_base_v3<T>& base ) ;
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179     page* make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181     <span class="keywordtype">void</span> invalidate_page_and_rethrow( ticket k ) ;
+<a name="l00182"></a>00182 };
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00185"></a>00185 <span class="keywordtype">void</span> micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb )<span class="keyword"> const </span>{
+<a name="l00186"></a>00186     atomic_backoff backoff;
+<a name="l00187"></a>00187     <span class="keywordflow">do</span> {
+<a name="l00188"></a>00188         backoff.pause();
+<a name="l00189"></a>00189         <span class="keywordflow">if</span>( counter&1 ) {
+<a name="l00190"></a>00190             ++rb.n_invalid_entries;
+<a name="l00191"></a>00191             throw_bad_last_alloc_exception_v4();
+<a name="l00192"></a>00192         }
+<a name="l00193"></a>00193     } <span class="keywordflow">while</span>( counter!=k ) ;
+<a name="l00194"></a>00194 }
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00197"></a>00197 <span class="keywordtype">void</span> micro_queue<T>::push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3<T>& base ) {
+<a name="l00198"></a>00198     k &= -concurrent_queue_rep_base::n_queue;
+<a name="l00199"></a>00199     page* p = NULL;
+<a name="l00200"></a>00200     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00201"></a>00201     <span class="keywordflow">if</span>( !index ) {
+<a name="l00202"></a>00202         <span class="keywordflow">try</span> {
+<a name="l00203"></a>00203             concurrent_queue_page_allocator& pa = base;
+<a name="l00204"></a>00204             p = pa.allocate_page();
+<a name="l00205"></a>00205         } <span class="keywordflow">catch</span> (...) {
+<a name="l00206"></a>00206             ++base.my_rep->n_invalid_entries;
+<a name="l00207"></a>00207             invalidate_page_and_rethrow( k );
+<a name="l00208"></a>00208         }
+<a name="l00209"></a>00209         p->mask = 0;
+<a name="l00210"></a>00210         p->next = NULL;
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212     
+<a name="l00213"></a>00213     <span class="keywordflow">if</span>( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
+<a name="l00214"></a>00214         
+<a name="l00215"></a>00215     <span class="keywordflow">if</span>( p ) {
+<a name="l00216"></a>00216         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00217"></a>00217         page* q = tail_page;
+<a name="l00218"></a>00218         <span class="keywordflow">if</span>( is_valid_page(q) )
+<a name="l00219"></a>00219             q->next = p;
+<a name="l00220"></a>00220         <span class="keywordflow">else</span>
+<a name="l00221"></a>00221             head_page = p; 
+<a name="l00222"></a>00222         tail_page = p;
+<a name="l00223"></a>00223     } <span class="keywordflow">else</span> {
+<a name="l00224"></a>00224         p = tail_page;
+<a name="l00225"></a>00225     }
+<a name="l00226"></a>00226    
+<a name="l00227"></a>00227     <span class="keywordflow">try</span> {
+<a name="l00228"></a>00228         copy_item( *p, index, item );
+<a name="l00229"></a>00229         <span class="comment">// If no exception was thrown, mark item as present.</span>
+<a name="l00230"></a>00230         p->mask |= uintptr_t(1)<<index;
+<a name="l00231"></a>00231         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00232"></a>00232     } <span class="keywordflow">catch</span> (...) {
+<a name="l00233"></a>00233         ++base.my_rep->n_invalid_entries;
+<a name="l00234"></a>00234         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00235"></a>00235         <span class="keywordflow">throw</span>;
+<a name="l00236"></a>00236     }
+<a name="l00237"></a>00237 }
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00240"></a>00240 <span class="keywordtype">bool</span> micro_queue<T>::pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
+<a name="l00241"></a>00241     k &= -concurrent_queue_rep_base::n_queue;
+<a name="l00242"></a>00242     <span class="keywordflow">if</span>( head_counter!=k ) spin_wait_until_eq( head_counter, k );
+<a name="l00243"></a>00243     <span class="keywordflow">if</span>( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
+<a name="l00244"></a>00244     page& p = *head_page;
+<a name="l00245"></a>00245     __TBB_ASSERT( &p, NULL );
+<a name="l00246"></a>00246     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00247"></a>00247     <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; 
+<a name="l00248"></a>00248     {
+<a name="l00249"></a>00249         micro_queue_pop_finalizer<T> finalizer( *<span class="keyword">this</span>, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
+<a name="l00250"></a>00250         <span class="keywordflow">if</span>( p.mask & uintptr_t(1)<<index ) {
+<a name="l00251"></a>00251             success = <span class="keyword">true</span>;
+<a name="l00252"></a>00252             assign_and_destroy_item( dst, p, index );
+<a name="l00253"></a>00253         } <span class="keywordflow">else</span> {
+<a name="l00254"></a>00254             --base.my_rep->n_invalid_entries;
+<a name="l00255"></a>00255         }
+<a name="l00256"></a>00256     }
+<a name="l00257"></a>00257     <span class="keywordflow">return</span> success;
+<a name="l00258"></a>00258 }
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00261"></a>00261 micro_queue<T>& micro_queue<T>::assign( <span class="keyword">const</span> micro_queue<T>& src, concurrent_queue_base_v3<T>& base ) {
+<a name="l00262"></a>00262     head_counter = src.head_counter;
+<a name="l00263"></a>00263     tail_counter = src.tail_counter;
+<a name="l00264"></a>00264     page_mutex   = src.page_mutex;
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266     <span class="keyword">const</span> page* srcp = src.head_page;
+<a name="l00267"></a>00267     <span class="keywordflow">if</span>( is_valid_page(srcp) ) {
+<a name="l00268"></a>00268         ticket g_index = head_counter;
+<a name="l00269"></a>00269         <span class="keywordflow">try</span> {
+<a name="l00270"></a>00270             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
+<a name="l00271"></a>00271             size_t index = head_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00272"></a>00272             size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274             head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+<a name="l00275"></a>00275             page* cur_page = head_page;
+<a name="l00276"></a>00276 
+<a name="l00277"></a>00277             <span class="keywordflow">if</span>( srcp != src.tail_page ) {
+<a name="l00278"></a>00278                 <span class="keywordflow">for</span>( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
+<a name="l00279"></a>00279                     cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index );
+<a name="l00280"></a>00280                     cur_page = cur_page->next;
+<a name="l00281"></a>00281                 }
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283                 __TBB_ASSERT( srcp==src.tail_page, NULL );
+<a name="l00284"></a>00284                 size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+<a name="l00285"></a>00285                 <span class="keywordflow">if</span>( last_index==0 ) last_index = base.my_rep->items_per_page;
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287                 cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
+<a name="l00288"></a>00288                 cur_page = cur_page->next;
+<a name="l00289"></a>00289             }
+<a name="l00290"></a>00290             tail_page = cur_page;
+<a name="l00291"></a>00291         } <span class="keywordflow">catch</span> (...) {
+<a name="l00292"></a>00292             invalidate_page_and_rethrow( g_index );
+<a name="l00293"></a>00293         }
+<a name="l00294"></a>00294     } <span class="keywordflow">else</span> {
+<a name="l00295"></a>00295         head_page = tail_page = NULL;
+<a name="l00296"></a>00296     }
+<a name="l00297"></a>00297     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 
+<a name="l00300"></a>00300 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00301"></a>00301 <span class="keywordtype">void</span> micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {
+<a name="l00302"></a>00302     <span class="comment">// Append an invalid page at address 1 so that no more pushes are allowed.</span>
+<a name="l00303"></a>00303     page* invalid_page = (page*)uintptr_t(1);
+<a name="l00304"></a>00304     {
+<a name="l00305"></a>00305         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00306"></a>00306         tail_counter = k+concurrent_queue_rep_base::n_queue+1;
+<a name="l00307"></a>00307         page* q = tail_page;
+<a name="l00308"></a>00308         <span class="keywordflow">if</span>( is_valid_page(q) )
+<a name="l00309"></a>00309             q->next = invalid_page;
+<a name="l00310"></a>00310         <span class="keywordflow">else</span>
+<a name="l00311"></a>00311             head_page = invalid_page;
+<a name="l00312"></a>00312         tail_page = invalid_page;
+<a name="l00313"></a>00313     }
+<a name="l00314"></a>00314     <span class="keywordflow">throw</span>;
+<a name="l00315"></a>00315 }
+<a name="l00316"></a>00316 
+<a name="l00317"></a>00317 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00318"></a>00318 concurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base, <span class="keyword">const</span> concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) {
+<a name="l00319"></a>00319     concurrent_queue_page_allocator& pa = base;
+<a name="l00320"></a>00320     page* new_page = pa.allocate_page();
+<a name="l00321"></a>00321     new_page->next = NULL;
+<a name="l00322"></a>00322     new_page->mask = src_page->mask;
+<a name="l00323"></a>00323     <span class="keywordflow">for</span>( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+<a name="l00324"></a>00324         <span class="keywordflow">if</span>( new_page->mask & uintptr_t(1)<<begin_in_page )
+<a name="l00325"></a>00325             copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
+<a name="l00326"></a>00326     <span class="keywordflow">return</span> new_page;
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00330"></a>00330 <span class="keyword">class </span>micro_queue_pop_finalizer: no_copy {
+<a name="l00331"></a>00331     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00332"></a>00332     ticket my_ticket;
+<a name="l00333"></a>00333     micro_queue<T>& my_queue;
+<a name="l00334"></a>00334     page* my_page; 
+<a name="l00335"></a>00335     concurrent_queue_page_allocator& allocator;
+<a name="l00336"></a>00336 <span class="keyword">public</span>:
+<a name="l00337"></a>00337     micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
+<a name="l00338"></a>00338         my_ticket(k), my_queue(queue), my_page(p), allocator(b)
+<a name="l00339"></a>00339     {}
+<a name="l00340"></a>00340     ~micro_queue_pop_finalizer() ;
+<a name="l00341"></a>00341 };
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00344"></a>00344 micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
+<a name="l00345"></a>00345     page* p = my_page;
+<a name="l00346"></a>00346     <span class="keywordflow">if</span>( is_valid_page(p) ) {
+<a name="l00347"></a>00347         spin_mutex::scoped_lock lock( my_queue.page_mutex );
+<a name="l00348"></a>00348         page* q = p->next;
+<a name="l00349"></a>00349         my_queue.head_page = q;
+<a name="l00350"></a>00350         <span class="keywordflow">if</span>( !is_valid_page(q) ) {
+<a name="l00351"></a>00351             my_queue.tail_page = NULL;
+<a name="l00352"></a>00352         }
+<a name="l00353"></a>00353     }
+<a name="l00354"></a>00354     my_queue.head_counter = my_ticket;
+<a name="l00355"></a>00355     <span class="keywordflow">if</span>( is_valid_page(p) ) {
+<a name="l00356"></a>00356         allocator.deallocate_page( p );
+<a name="l00357"></a>00357     }
+<a name="l00358"></a>00358 }
+<a name="l00359"></a>00359 
+<a name="l00360"></a>00360 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( pop )</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4146 is back</span>
+<a name="l00363"></a>00363 <span class="preprocessor"></span>
+<a name="l00364"></a>00364 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_rep ;
+<a name="l00365"></a>00365 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00366"></a>00366 
+<a name="l00368"></a>00368 
+<a name="l00371"></a>00371 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00372"></a>00372 <span class="keyword">struct </span>concurrent_queue_rep : <span class="keyword">public</span> concurrent_queue_rep_base {
+<a name="l00373"></a>00373     micro_queue<T> array[n_queue];
+<a name="l00374"></a>00374 
+<a name="l00376"></a>00376     <span class="keyword">static</span> size_t index( ticket k ) {
+<a name="l00377"></a>00377         <span class="keywordflow">return</span> k*phi%n_queue;
+<a name="l00378"></a>00378     }
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380     micro_queue<T>& choose( ticket k ) {
+<a name="l00381"></a>00381         <span class="comment">// The formula here approximates LRU in a cache-oblivious way.</span>
+<a name="l00382"></a>00382         <span class="keywordflow">return</span> array[index(k)];
+<a name="l00383"></a>00383     }
+<a name="l00384"></a>00384 };
+<a name="l00385"></a>00385 
+<a name="l00387"></a>00387 
+<a name="l00391"></a>00391 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00392"></a>00392 <span class="keyword">class </span>concurrent_queue_base_v3: <span class="keyword">public</span> concurrent_queue_page_allocator {
+<a name="l00394"></a>00394     concurrent_queue_rep<T>* my_rep;
+<a name="l00395"></a>00395 
+<a name="l00396"></a>00396     <span class="keyword">friend</span> <span class="keyword">struct </span>concurrent_queue_rep<T>;
+<a name="l00397"></a>00397     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue<T>;
+<a name="l00398"></a>00398     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep<T>;
+<a name="l00399"></a>00399     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3<T>;
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401 <span class="keyword">protected</span>:
+<a name="l00402"></a>00402     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_rep<T>::page page;
+<a name="l00403"></a>00403 
+<a name="l00404"></a>00404 <span class="keyword">private</span>:
+<a name="l00405"></a>00405     <span class="comment">/* override */</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00406"></a>00406         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00407"></a>00407         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
+<a name="l00408"></a>00408         <span class="keywordflow">return</span> reinterpret_cast<page*>(allocate_block ( n ));
+<a name="l00409"></a>00409     }
+<a name="l00410"></a>00410 
+<a name="l00411"></a>00411     <span class="comment">/* override */</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page *p ) {
+<a name="l00412"></a>00412         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00413"></a>00413         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
+<a name="l00414"></a>00414         deallocate_block( reinterpret_cast<void*>(p), n );
+<a name="l00415"></a>00415     }
+<a name="l00416"></a>00416 
+<a name="l00418"></a>00418     <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) = 0;
+<a name="l00419"></a>00419 
+<a name="l00421"></a>00421     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *p, size_t n ) = 0;
+<a name="l00422"></a>00422 
+<a name="l00423"></a>00423 <span class="keyword">protected</span>:
+<a name="l00424"></a>00424     concurrent_queue_base_v3( size_t item_size ) ;
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426     <span class="comment">/* override */</span> <span class="keyword">virtual</span> ~concurrent_queue_base_v3() {
+<a name="l00427"></a>00427 <span class="preprocessor">#if __TBB_USE_ASSERT</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span>        size_t nq = my_rep->n_queue;
+<a name="l00429"></a>00429         <span class="keywordflow">for</span>( size_t i=0; i<nq; i++ )
+<a name="l00430"></a>00430             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, <span class="stringliteral">"pages were not freed properly"</span> );
+<a name="l00431"></a>00431 #endif <span class="comment">/* __TBB_USE_ASSERT */</span>
+<a name="l00432"></a>00432         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
+<a name="l00433"></a>00433     }
+<a name="l00434"></a>00434 
+<a name="l00436"></a>00436     <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00437"></a>00437         concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00438"></a>00438         ticket k = r.tail_counter++;
+<a name="l00439"></a>00439         r.choose(k).push( src, k, *<span class="keyword">this</span> );
+<a name="l00440"></a>00440     }
+<a name="l00441"></a>00441 
+<a name="l00443"></a>00443 
+<a name="l00444"></a>00444     <span class="keywordtype">bool</span> internal_try_pop( <span class="keywordtype">void</span>* dst ) ;
+<a name="l00445"></a>00445 
+<a name="l00447"></a>00447     size_t internal_size() <span class="keyword">const </span>;
+<a name="l00448"></a>00448 
+<a name="l00450"></a>00450     <span class="keywordtype">bool</span> internal_empty() <span class="keyword">const </span>;
+<a name="l00451"></a>00451 
+<a name="l00453"></a>00453     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00454"></a>00454     <span class="keywordtype">void</span> internal_finish_clear() ;
+<a name="l00455"></a>00455 
+<a name="l00457"></a>00457     <span class="keywordtype">void</span> internal_throw_exception()<span class="keyword"> const </span>{
+<a name="l00458"></a>00458         throw_exception( eid_bad_alloc );
+<a name="l00459"></a>00459     }
+<a name="l00460"></a>00460 
+<a name="l00462"></a>00462     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
+<a name="l00463"></a>00463 };
+<a name="l00464"></a>00464 
+<a name="l00465"></a>00465 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00466"></a>00466 concurrent_queue_base_v3<T>::concurrent_queue_base_v3( size_t item_size ) {
+<a name="l00467"></a>00467     my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);
+<a name="l00468"></a>00468     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00469"></a>00469     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00470"></a>00470     __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00471"></a>00471     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00472"></a>00472     memset(my_rep,0,<span class="keyword">sizeof</span>(concurrent_queue_rep<T>));
+<a name="l00473"></a>00473     my_rep->item_size = item_size;
+<a name="l00474"></a>00474     my_rep->items_per_page = item_size<=8 ? 32 :
+<a name="l00475"></a>00475                              item_size<=16 ? 16 : 
+<a name="l00476"></a>00476                              item_size<=32 ? 8 :
+<a name="l00477"></a>00477                              item_size<=64 ? 4 :
+<a name="l00478"></a>00478                              item_size<=128 ? 2 :
+<a name="l00479"></a>00479                              1;
+<a name="l00480"></a>00480 }
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00483"></a>00483 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_try_pop( <span class="keywordtype">void</span>* dst ) {
+<a name="l00484"></a>00484     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00485"></a>00485     ticket k;
+<a name="l00486"></a>00486     <span class="keywordflow">do</span> {
+<a name="l00487"></a>00487         k = r.head_counter;
+<a name="l00488"></a>00488         <span class="keywordflow">for</span>(;;) {
+<a name="l00489"></a>00489             <span class="keywordflow">if</span>( r.tail_counter<=k ) {
+<a name="l00490"></a>00490                 <span class="comment">// Queue is empty </span>
+<a name="l00491"></a>00491                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00492"></a>00492             }
+<a name="l00493"></a>00493             <span class="comment">// Queue had item with ticket k when we looked.  Attempt to get that item.</span>
+<a name="l00494"></a>00494             ticket tk=k;
+<a name="l00495"></a>00495 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
+<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00499"></a>00499 <span class="preprocessor"></span>            k = r.head_counter.compare_and_swap( tk+1, tk );
+<a name="l00500"></a>00500 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00502"></a>00502 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00503"></a>00503 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( k==tk )
+<a name="l00504"></a>00504                 <span class="keywordflow">break</span>;
+<a name="l00505"></a>00505             <span class="comment">// Another thread snatched the item, retry.</span>
+<a name="l00506"></a>00506         }
+<a name="l00507"></a>00507     } <span class="keywordflow">while</span>( !r.choose( k ).pop( dst, k, *<span class="keyword">this</span> ) );
+<a name="l00508"></a>00508     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00509"></a>00509 }
+<a name="l00510"></a>00510 
+<a name="l00511"></a>00511 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00512"></a>00512 size_t concurrent_queue_base_v3<T>::internal_size()<span class="keyword"> const </span>{
+<a name="l00513"></a>00513     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00514"></a>00514     __TBB_ASSERT( <span class="keyword">sizeof</span>(ptrdiff_t)<=<span class="keyword">sizeof</span>(size_t), NULL );
+<a name="l00515"></a>00515     ticket hc = r.head_counter;
+<a name="l00516"></a>00516     size_t nie = r.n_invalid_entries;
+<a name="l00517"></a>00517     ticket tc = r.tail_counter;
+<a name="l00518"></a>00518     __TBB_ASSERT( hc!=tc || !nie, NULL );
+<a name="l00519"></a>00519     ptrdiff_t sz = tc-hc-nie;
+<a name="l00520"></a>00520     <span class="keywordflow">return</span> sz<0 ? 0 :  size_t(sz);
+<a name="l00521"></a>00521 }
+<a name="l00522"></a>00522 
+<a name="l00523"></a>00523 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00524"></a>00524 <span class="keywordtype">bool</span> concurrent_queue_base_v3<T>::internal_empty()<span class="keyword"> const </span>{
+<a name="l00525"></a>00525     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00526"></a>00526     ticket tc = r.tail_counter;
+<a name="l00527"></a>00527     ticket hc = r.head_counter;
+<a name="l00528"></a>00528     <span class="comment">// if tc!=r.tail_counter, the queue was not empty at some point between the two reads.</span>
+<a name="l00529"></a>00529     <span class="keywordflow">return</span> tc==r.tail_counter && tc==hc+r.n_invalid_entries ;
+<a name="l00530"></a>00530 }
+<a name="l00531"></a>00531 
+<a name="l00532"></a>00532 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00533"></a>00533 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::internal_finish_clear() {
+<a name="l00534"></a>00534     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00535"></a>00535     size_t nq = r.n_queue;
+<a name="l00536"></a>00536     <span class="keywordflow">for</span>( size_t i=0; i<nq; ++i ) {
+<a name="l00537"></a>00537         page* tp = r.array[i].tail_page;
+<a name="l00538"></a>00538         <span class="keywordflow">if</span>( is_valid_page(tp) ) {
+<a name="l00539"></a>00539             __TBB_ASSERT( r.array[i].head_page==tp, <span class="stringliteral">"at most one page should remain"</span> );
+<a name="l00540"></a>00540             deallocate_page( tp );
+<a name="l00541"></a>00541             r.array[i].tail_page = NULL;
+<a name="l00542"></a>00542         } <span class="keywordflow">else</span> 
+<a name="l00543"></a>00543             __TBB_ASSERT( !is_valid_page(r.array[i].head_page), <span class="stringliteral">"head page pointer corrupt?"</span> );
+<a name="l00544"></a>00544     }
+<a name="l00545"></a>00545 }
+<a name="l00546"></a>00546 
+<a name="l00547"></a>00547 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00548"></a>00548 <span class="keywordtype">void</span> concurrent_queue_base_v3<T>::assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) {
+<a name="l00549"></a>00549     concurrent_queue_rep<T>& r = *my_rep;
+<a name="l00550"></a>00550     r.items_per_page = src.my_rep->items_per_page;
+<a name="l00551"></a>00551 
+<a name="l00552"></a>00552     <span class="comment">// copy concurrent_queue_rep.</span>
+<a name="l00553"></a>00553     r.head_counter = src.my_rep->head_counter;
+<a name="l00554"></a>00554     r.tail_counter = src.my_rep->tail_counter;
+<a name="l00555"></a>00555     r.n_invalid_entries = src.my_rep->n_invalid_entries;
+<a name="l00556"></a>00556 
+<a name="l00557"></a>00557     <span class="comment">// copy micro_queues</span>
+<a name="l00558"></a>00558     <span class="keywordflow">for</span>( size_t i = 0; i<r.n_queue; ++i )
+<a name="l00559"></a>00559         r.array[i].assign( src.my_rep->array[i], *<span class="keyword">this</span>);
+<a name="l00560"></a>00560 
+<a name="l00561"></a>00561     __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
+<a name="l00562"></a>00562             <span class="stringliteral">"the source concurrent queue should not be concurrently modified."</span> );
+<a name="l00563"></a>00563 }
+<a name="l00564"></a>00564 
+<a name="l00565"></a>00565 <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;
+<a name="l00566"></a>00566 
+<a name="l00567"></a>00567 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00568"></a>00568 <span class="keyword">class </span>concurrent_queue_iterator_rep: no_assign {
+<a name="l00569"></a>00569 <span class="keyword">public</span>:
+<a name="l00570"></a>00570     ticket head_counter;
+<a name="l00571"></a>00571     <span class="keyword">const</span> concurrent_queue_base_v3<T>& my_queue;
+<a name="l00572"></a>00572     <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];
+<a name="l00573"></a>00573     concurrent_queue_iterator_rep( <span class="keyword">const</span> concurrent_queue_base_v3<T>& queue ) :
+<a name="l00574"></a>00574         head_counter(queue.my_rep->head_counter),
+<a name="l00575"></a>00575         my_queue(queue)
+<a name="l00576"></a>00576     {
+<a name="l00577"></a>00577         <span class="keywordflow">for</span>( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )
+<a name="l00578"></a>00578             array[k] = queue.my_rep->array[k].head_page;
+<a name="l00579"></a>00579     }
+<a name="l00580"></a>00580 
+<a name="l00582"></a>00582     <span class="keywordtype">bool</span> get_item( <span class="keywordtype">void</span>*& item, size_t k ) ;
+<a name="l00583"></a>00583 };
+<a name="l00584"></a>00584 
+<a name="l00585"></a>00585 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00586"></a>00586 <span class="keywordtype">bool</span> concurrent_queue_iterator_rep<T>::get_item( <span class="keywordtype">void</span>*& item, size_t k ) {
+<a name="l00587"></a>00587     <span class="keywordflow">if</span>( k==my_queue.my_rep->tail_counter ) {
+<a name="l00588"></a>00588         item = NULL;
+<a name="l00589"></a>00589         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00590"></a>00590     } <span class="keywordflow">else</span> {
+<a name="l00591"></a>00591         <span class="keyword">typename</span> concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];
+<a name="l00592"></a>00592         __TBB_ASSERT(p,NULL);
+<a name="l00593"></a>00593         size_t i = k/concurrent_queue_rep<T>::n_queue & (my_queue.my_rep->items_per_page-1);
+<a name="l00594"></a>00594         item = static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.my_rep->item_size*i;
+<a name="l00595"></a>00595         <span class="keywordflow">return</span> (p->mask & uintptr_t(1)<<i)!=0;
+<a name="l00596"></a>00596     }
+<a name="l00597"></a>00597 }
+<a name="l00598"></a>00598 
+<a name="l00600"></a>00600 
+<a name="l00601"></a>00601 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00602"></a>00602 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 : no_assign {
+<a name="l00604"></a>00604 
+<a name="l00605"></a>00605     concurrent_queue_iterator_rep<Value>* my_rep;
+<a name="l00606"></a>00606 
+<a name="l00607"></a>00607     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00608"></a>00608     <span class="keyword">friend</span> <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 );
+<a name="l00609"></a>00609 
+<a name="l00610"></a>00610     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00611"></a>00611     <span class="keyword">friend</span> <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 );
+<a name="l00612"></a>00612 <span class="keyword">protected</span>:
+<a name="l00614"></a>00614     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
+<a name="l00615"></a>00615 
+<a name="l00616"></a>00616 <span class="keyword">public</span>:
+<a name="l00618"></a>00618     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
+<a name="l00619"></a>00619 <span class="preprocessor">#if __GNUC__==4&&__GNUC_MINOR__==3</span>
+<a name="l00620"></a>00620 <span class="preprocessor"></span>        <span class="comment">// to get around a possible gcc 4.3 bug</span>
+<a name="l00621"></a>00621         __asm__ __volatile__(<span class="stringliteral">""</span>: : :<span class="stringliteral">"memory"</span>);
+<a name="l00622"></a>00622 <span class="preprocessor">#endif</span>
+<a name="l00623"></a>00623 <span class="preprocessor"></span>    }
+<a name="l00624"></a>00624 
+<a name="l00626"></a>00626     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
+<a name="l00627"></a>00627         assign(i);
+<a name="l00628"></a>00628     }
+<a name="l00629"></a>00629 
+<a name="l00631"></a>00631     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) ;
+<a name="l00632"></a>00632 
+<a name="l00633"></a>00633 <span class="keyword">protected</span>:
+<a name="l00635"></a>00635     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) ;
+<a name="l00636"></a>00636 
+<a name="l00638"></a>00638     <span class="keywordtype">void</span> advance() ;
+<a name="l00639"></a>00639 
+<a name="l00641"></a>00641     ~concurrent_queue_iterator_base_v3() {
+<a name="l00642"></a>00642         cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+<a name="l00643"></a>00643         my_rep = NULL;
+<a name="l00644"></a>00644     }
+<a name="l00645"></a>00645 };
+<a name="l00646"></a>00646 
+<a name="l00647"></a>00647 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00648"></a>00648 concurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue ) {
+<a name="l00649"></a>00649     my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+<a name="l00650"></a>00650     <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>(queue);
+<a name="l00651"></a>00651     size_t k = my_rep->head_counter;
+<a name="l00652"></a>00652     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
+<a name="l00653"></a>00653 }
+<a name="l00654"></a>00654 
+<a name="l00655"></a>00655 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00656"></a>00656 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<Value>& other ) {
+<a name="l00657"></a>00657     <span class="keywordflow">if</span>( my_rep!=other.my_rep ) {
+<a name="l00658"></a>00658         <span class="keywordflow">if</span>( my_rep ) {
+<a name="l00659"></a>00659             cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+<a name="l00660"></a>00660             my_rep = NULL;
+<a name="l00661"></a>00661         }
+<a name="l00662"></a>00662         <span class="keywordflow">if</span>( other.my_rep ) {
+<a name="l00663"></a>00663             my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+<a name="l00664"></a>00664             <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );
+<a name="l00665"></a>00665         }
+<a name="l00666"></a>00666     }
+<a name="l00667"></a>00667     my_item = other.my_item;
+<a name="l00668"></a>00668 }
+<a name="l00669"></a>00669 
+<a name="l00670"></a>00670 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
+<a name="l00671"></a>00671 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3<Value>::advance() {
+<a name="l00672"></a>00672     __TBB_ASSERT( my_item, <span class="stringliteral">"attempt to increment iterator past end of queue"</span> );  
+<a name="l00673"></a>00673     size_t k = my_rep->head_counter;
+<a name="l00674"></a>00674     <span class="keyword">const</span> concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
+<a name="l00675"></a>00675 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00676"></a>00676 <span class="preprocessor"></span>    <span class="keywordtype">void</span>* tmp;
+<a name="l00677"></a>00677     my_rep->get_item(tmp,k);
+<a name="l00678"></a>00678     __TBB_ASSERT( my_item==tmp, NULL );
+<a name="l00679"></a>00679 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00680"></a>00680     size_t i = k/concurrent_queue_rep<Value>::n_queue & (queue.my_rep->items_per_page-1);
+<a name="l00681"></a>00681     <span class="keywordflow">if</span>( i==queue.my_rep->items_per_page-1 ) {
+<a name="l00682"></a>00682         <span class="keyword">typename</span> concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];
+<a name="l00683"></a>00683         root = root->next;
+<a name="l00684"></a>00684     }
+<a name="l00685"></a>00685     <span class="comment">// advance k</span>
+<a name="l00686"></a>00686     my_rep->head_counter = ++k;
+<a name="l00687"></a>00687     <span class="keywordflow">if</span>( !my_rep->get_item(my_item, k) ) advance();
+<a name="l00688"></a>00688 }
+<a name="l00689"></a>00689 
+<a name="l00690"></a>00690 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00691"></a>00691 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> concurrent_queue_base_v3<const T>& add_constness( <span class="keyword">const</span> concurrent_queue_base_v3<T>& q )
+<a name="l00692"></a>00692 {
+<a name="l00693"></a>00693     <span class="keywordflow">return</span> *reinterpret_cast<const concurrent_queue_base_v3<const T> *>(&q) ;
+<a name="l00694"></a>00694 }
+<a name="l00695"></a>00695 
+<a name="l00696"></a>00696 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00697"></a>00697 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> concurrent_queue_iterator_base_v3<const T>& add_constness( <span class="keyword">const</span> concurrent_queue_iterator_base_v3<T>& q )
+<a name="l00698"></a>00698 {
+<a name="l00699"></a>00699     <span class="keywordflow">return</span> *reinterpret_cast<const concurrent_queue_iterator_base_v3<const T> *>(&q) ;
+<a name="l00700"></a>00700 }
+<a name="l00701"></a>00701 
+<a name="l00703"></a>00703 
+<a name="l00705"></a>00705 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00706"></a>00706 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base_v3<Value>,
+<a name="l00707"></a>00707         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
+<a name="l00708"></a>00708 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00709"></a>00709 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00710"></a>00710     <span class="keyword">friend</span> class ::tbb::strict_ppl::concurrent_queue;
+<a name="l00711"></a>00711 <span class="preprocessor">#else</span>
+<a name="l00712"></a>00712 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00713"></a>00713 <span class="preprocessor">#endif </span>
+<a name="l00715"></a>00715 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :</span>
+<a name="l00716"></a>00716 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3<Value>(queue)
+<a name="l00717"></a>00717     {
+<a name="l00718"></a>00718     }
+<a name="l00719"></a>00719 
+<a name="l00720"></a>00720     template<typename T>
+<a name="l00721"></a>00721     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_base_v3<T>& other ) :
+<a name="l00722"></a>00722         concurrent_queue_iterator_base_v3<Value>(add_constness(other))
+<a name="l00723"></a>00723     {
+<a name="l00724"></a>00724     }
+<a name="l00725"></a>00725 
+<a name="l00726"></a>00726 <span class="keyword">public</span>:
+<a name="l00727"></a>00727     concurrent_queue_iterator() {}
+<a name="l00728"></a>00728 
+<a name="l00730"></a>00730     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,Value>& other ) :
+<a name="l00731"></a>00731         concurrent_queue_iterator_base_v3<Value>(other)
+<a name="l00732"></a>00732     {
+<a name="l00733"></a>00733     }
+<a name="l00734"></a>00734 
+<a name="l00735"></a>00735     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00736"></a>00736     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,T>& other ) :
+<a name="l00737"></a>00737         concurrent_queue_iterator_base_v3<Value>(add_constness(other))
+<a name="l00738"></a>00738     {
+<a name="l00739"></a>00739     }
+<a name="l00740"></a>00740 
+<a name="l00742"></a>00742     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
+<a name="l00743"></a>00743         assign(other);
+<a name="l00744"></a>00744         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00745"></a>00745     }
+<a name="l00746"></a>00746 
+<a name="l00748"></a>00748     Value& operator*()<span class="keyword"> const </span>{
+<a name="l00749"></a>00749         <span class="keywordflow">return</span> *static_cast<Value*>(this->my_item);
+<a name="l00750"></a>00750     }
+<a name="l00751"></a>00751 
+<a name="l00752"></a>00752     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00753"></a>00753 
+<a name="l00755"></a>00755     concurrent_queue_iterator& operator++() {
+<a name="l00756"></a>00756         this->advance();
+<a name="l00757"></a>00757         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00758"></a>00758     }
+<a name="l00759"></a>00759 
+<a name="l00761"></a>00761     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00762"></a>00762         Value* result = &operator*();
+<a name="l00763"></a>00763         operator++();
+<a name="l00764"></a>00764         <span class="keywordflow">return</span> result;
+<a name="l00765"></a>00765     }
+<a name="l00766"></a>00766 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00767"></a>00767 
+<a name="l00768"></a>00768 
+<a name="l00769"></a>00769 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00770"></a>00770 <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 ) {
+<a name="l00771"></a>00771     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00772"></a>00772 }
+<a name="l00773"></a>00773 
+<a name="l00774"></a>00774 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00775"></a>00775 <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 ) {
+<a name="l00776"></a>00776     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l00777"></a>00777 }
+<a name="l00778"></a>00778 
+<a name="l00779"></a>00779 } <span class="comment">// namespace internal</span>
+<a name="l00780"></a>00780 
+<a name="l00782"></a>00782 
+<a name="l00783"></a>00783 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00784"></a>00784 
+<a name="l00786"></a>00786 <span class="keyword">namespace </span>internal {
+<a name="l00787"></a>00787 
+<a name="l00788"></a>00788 <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00789"></a>00789 <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00790"></a>00790 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00791"></a>00791 <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;
+<a name="l00792"></a>00792 
+<a name="l00794"></a>00794 
+<a name="l00796"></a>00796 <span class="keyword">class </span>concurrent_queue_base_v3: no_copy {
+<a name="l00798"></a>00798     concurrent_queue_rep* my_rep;
+<a name="l00799"></a>00799 
+<a name="l00800"></a>00800     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00801"></a>00801     <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
+<a name="l00802"></a>00802     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
+<a name="l00803"></a>00803     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00804"></a>00804     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00805"></a>00805 <span class="keyword">protected</span>:
+<a name="l00807"></a>00807     <span class="keyword">struct </span>page {
+<a name="l00808"></a>00808         page* next;
+<a name="l00809"></a>00809         uintptr_t mask; 
+<a name="l00810"></a>00810     };
+<a name="l00811"></a>00811 
+<a name="l00813"></a>00813     ptrdiff_t my_capacity;
+<a name="l00814"></a>00814    
+<a name="l00816"></a>00816     size_t items_per_page;
+<a name="l00817"></a>00817 
+<a name="l00819"></a>00819     size_t item_size;
+<a name="l00820"></a>00820 
+<a name="l00821"></a>00821 <span class="keyword">private</span>:
+<a name="l00822"></a>00822     <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 ) = 0;
+<a name="l00823"></a>00823     <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 ) = 0;
+<a name="l00824"></a>00824 <span class="keyword">protected</span>:
+<a name="l00825"></a>00825     __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
+<a name="l00826"></a>00826     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
+<a name="l00827"></a>00827 
+<a name="l00829"></a>00829     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00830"></a>00830 
+<a name="l00832"></a>00832     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
+<a name="l00833"></a>00833 
+<a name="l00835"></a>00835     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00836"></a>00836 
+<a name="l00838"></a>00838 
+<a name="l00839"></a>00839     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
+<a name="l00840"></a>00840 
+<a name="l00842"></a>00842     ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
+<a name="l00843"></a>00843 
+<a name="l00845"></a>00845     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_empty() <span class="keyword">const</span>;
+<a name="l00846"></a>00846 
+<a name="l00848"></a>00848     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+<a name="l00849"></a>00849 
+<a name="l00851"></a>00851     <span class="keyword">virtual</span> page *allocate_page() = 0;
+<a name="l00852"></a>00852 
+<a name="l00854"></a>00854     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) = 0;
+<a name="l00855"></a>00855 
+<a name="l00857"></a>00857     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00858"></a>00858     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
+<a name="l00859"></a>00859 
+<a name="l00861"></a>00861     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
+<a name="l00862"></a>00862 
+<a name="l00864"></a>00864     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_base_v3& src ) ;
+<a name="l00865"></a>00865 
+<a name="l00866"></a>00866 <span class="keyword">private</span>:
+<a name="l00867"></a>00867     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) = 0;
+<a name="l00868"></a>00868 };
+<a name="l00869"></a>00869 
+<a name="l00871"></a>00871 
+<a name="l00872"></a>00872 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 {
+<a name="l00874"></a>00874 
+<a name="l00875"></a>00875     concurrent_queue_iterator_rep* my_rep;
+<a name="l00876"></a>00876 
+<a name="l00877"></a>00877     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00878"></a>00878     <span class="keyword">friend</span> <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 );
+<a name="l00879"></a>00879 
+<a name="l00880"></a>00880     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00881"></a>00881     <span class="keyword">friend</span> <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 );
+<a name="l00882"></a>00882 <span class="keyword">protected</span>:
+<a name="l00884"></a>00884     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
+<a name="l00885"></a>00885 
+<a name="l00887"></a>00887     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
+<a name="l00888"></a>00888 
+<a name="l00890"></a>00890     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
+<a name="l00891"></a>00891         assign(i);
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 
+<a name="l00895"></a>00895     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3& queue );
+<a name="l00896"></a>00896 
+<a name="l00898"></a>00898     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3& i );
+<a name="l00899"></a>00899 
+<a name="l00901"></a>00901     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
+<a name="l00902"></a>00902 
+<a name="l00904"></a>00904     __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
+<a name="l00905"></a>00905 };
+<a name="l00906"></a>00906 
+<a name="l00907"></a>00907 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
+<a name="l00908"></a>00908 
+<a name="l00910"></a>00910 
+<a name="l00912"></a>00912 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00913"></a>00913 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base,
+<a name="l00914"></a>00914         <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
+<a name="l00915"></a>00915 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00916"></a>00916 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00917"></a>00917     <span class="keyword">friend</span> class ::tbb::concurrent_bounded_queue;
+<a name="l00918"></a>00918 
+<a name="l00919"></a>00919     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00920"></a>00920     <span class="keyword">friend</span> class ::tbb::deprecated::concurrent_queue;
+<a name="l00921"></a>00921 <span class="preprocessor">#else</span>
+<a name="l00922"></a>00922 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00923"></a>00923 <span class="preprocessor">#endif </span>
+<a name="l00925"></a>00925 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :</span>
+<a name="l00926"></a>00926 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3(queue)
+<a name="l00927"></a>00927     {
+<a name="l00928"></a>00928     }
+<a name="l00929"></a>00929 
+<a name="l00930"></a>00930 <span class="keyword">public</span>:
+<a name="l00931"></a>00931     concurrent_queue_iterator() {}
+<a name="l00932"></a>00932 
+<a name="l00935"></a>00935     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00936"></a>00936         concurrent_queue_iterator_base_v3(other)
+<a name="l00937"></a>00937     {}
+<a name="l00938"></a>00938 
+<a name="l00940"></a>00940     concurrent_queue_iterator& operator=( <span class="keyword">const</span> concurrent_queue_iterator& other ) {
+<a name="l00941"></a>00941         assign(other);
+<a name="l00942"></a>00942         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00943"></a>00943     }
+<a name="l00944"></a>00944 
+<a name="l00946"></a>00946     Value& operator*()<span class="keyword"> const </span>{
+<a name="l00947"></a>00947         <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
+<a name="l00948"></a>00948     }
+<a name="l00949"></a>00949 
+<a name="l00950"></a>00950     Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00951"></a>00951 
+<a name="l00953"></a>00953     concurrent_queue_iterator& operator++() {
+<a name="l00954"></a>00954         advance();
+<a name="l00955"></a>00955         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00956"></a>00956     }
+<a name="l00957"></a>00957 
+<a name="l00959"></a>00959     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00960"></a>00960         Value* result = &operator*();
+<a name="l00961"></a>00961         operator++();
+<a name="l00962"></a>00962         <span class="keywordflow">return</span> result;
+<a name="l00963"></a>00963     }
+<a name="l00964"></a>00964 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00965"></a>00965 
+<a name="l00966"></a>00966 
+<a name="l00967"></a>00967 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00968"></a>00968 <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 ) {
+<a name="l00969"></a>00969     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00970"></a>00970 }
+<a name="l00971"></a>00971 
+<a name="l00972"></a>00972 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00973"></a>00973 <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 ) {
+<a name="l00974"></a>00974     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l00975"></a>00975 }
+<a name="l00976"></a>00976 
+<a name="l00977"></a>00977 } <span class="comment">// namespace internal;</span>
+<a name="l00978"></a>00978 
+<a name="l00980"></a>00980 
+<a name="l00981"></a>00981 } <span class="comment">// namespace tbb</span>
+<a name="l00982"></a>00982 
+<a name="l00983"></a>00983 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_internal_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/a00258.html b/doc/html/a00258.html
deleted file mode 100644
index bbc0541..0000000
--- a/doc/html/a00258.html
+++ /dev/null
@@ -1,401 +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>atomic.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>atomic.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_atomic_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_atomic_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <cstddef></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#if _MSC_VER </span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG __int64</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG long long</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings </span>
-<a name="l00037"></a>00037 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4244 4267)</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span>
-<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
-<a name="l00042"></a>00042 
-<a name="l00044"></a><a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
-<a name="l00046"></a>00046     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>,
-<a name="l00048"></a>00048     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
-<a name="l00050"></a>00050     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
-<a name="l00051"></a>00051 };
-<a name="l00052"></a>00052 
-<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#error Do not know syntax for forcing alignment.</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">template</span><size_t S>
-<a name="l00065"></a>00065 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">template</span><>
-<a name="l00068"></a>00068 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
-<a name="l00069"></a>00069     <span class="keyword">typedef</span> int8_t word;
-<a name="l00070"></a>00070     int8_t value;
-<a name="l00071"></a>00071 };
-<a name="l00072"></a>00072 <span class="keyword">template</span><>
-<a name="l00073"></a>00073 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> int16_t word;
-<a name="l00075"></a>00075     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
-<a name="l00076"></a>00076 };
-<a name="l00077"></a>00077 <span class="keyword">template</span><>
-<a name="l00078"></a>00078 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
-<a name="l00079"></a>00079 <span class="preprocessor">#if _MSC_VER && __TBB_WORDSIZE==4</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
-<a name="l00081"></a>00081     <span class="keyword">typedef</span> intptr_t word;
-<a name="l00082"></a>00082 <span class="preprocessor">#else</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
-<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
-<a name="l00086"></a>00086 };
-<a name="l00087"></a>00087 <span class="keyword">template</span><>
-<a name="l00088"></a>00088 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
-<a name="l00089"></a>00089     <span class="keyword">typedef</span> int64_t word;
-<a name="l00090"></a>00090     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
-<a name="l00091"></a>00091 };
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">template</span><size_t Size, memory_semantics M>
-<a name="l00094"></a>00094 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \</span>
-<a name="l00097"></a>00097 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                               \</span>
-<a name="l00098"></a>00098 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
-<a name="l00099"></a>00099 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
-<a name="l00100"></a>00100 <span class="preprocessor">            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">            return __TBB_FetchAndAdd##S##M(location,addend);                    \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
-<a name="l00106"></a>00106 <span class="preprocessor">            return __TBB_FetchAndStore##S##M(location,value);                   \</span>
-<a name="l00107"></a>00107 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00108"></a>00108 <span class="preprocessor">    };</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span>
-<a name="l00110"></a>00110 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \</span>
-<a name="l00111"></a>00111 <span class="preprocessor">    template<memory_semantics M>                                         \</span>
-<a name="l00112"></a>00112 <span class="preprocessor">    struct atomic_traits<S,M> {                                          \</span>
-<a name="l00113"></a>00113 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
-<a name="l00114"></a>00114 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
-<a name="l00115"></a>00115 <span class="preprocessor">            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
-<a name="l00118"></a>00118 <span class="preprocessor">            return __TBB_FetchAndAdd##S(location,addend);                       \</span>
-<a name="l00119"></a>00119 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
-<a name="l00121"></a>00121 <span class="preprocessor">            return __TBB_FetchAndStore##S(location,value);                      \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">        }                                                                       \</span>
-<a name="l00123"></a>00123 <span class="preprocessor">    };</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00127"></a>00127 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00128"></a>00128 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00129"></a>00129 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
-<a name="l00130"></a>00130 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00131"></a>00131 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00132"></a>00132 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00133"></a>00133 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00134"></a>00134 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00135"></a>00135 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00136"></a>00136 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00137"></a>00137 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(1)
-<a name="l00140"></a>00140 __TBB_DECL_ATOMIC_PRIMITIVES(2)
-<a name="l00141"></a>00141 __TBB_DECL_ATOMIC_PRIMITIVES(4)
-<a name="l00142"></a>00142 __TBB_DECL_ATOMIC_PRIMITIVES(8)
-<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
-<a name="l00144"></a>00144 <span class="preprocessor"></span>
-<a name="l00146"></a>00146 
-<a name="l00148"></a>00148 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00154"></a>00154 <span class="keyword">struct </span>atomic_impl {
-<a name="l00155"></a>00155 <span class="keyword">protected</span>:
-<a name="l00156"></a>00156     atomic_rep<sizeof(T)> rep;
-<a name="l00157"></a>00157 <span class="keyword">private</span>:
-<a name="l00159"></a>00159     <span class="keyword">union </span>converter {
-<a name="l00160"></a>00160         T value;
-<a name="l00161"></a>00161         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
-<a name="l00162"></a>00162     };
-<a name="l00163"></a>00163 <span class="keyword">public</span>:
-<a name="l00164"></a>00164     <span class="keyword">typedef</span> T value_type;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="keyword">template</span><memory_semantics M>
-<a name="l00167"></a>00167     value_type fetch_and_store( value_type value ) {
-<a name="l00168"></a>00168         converter u, w;
-<a name="l00169"></a>00169         u.value = value;
-<a name="l00170"></a>00170         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
-<a name="l00171"></a>00171         <span class="keywordflow">return</span> w.value;
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     value_type fetch_and_store( value_type value ) {
-<a name="l00175"></a>00175         <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="keyword">template</span><memory_semantics M>
-<a name="l00179"></a>00179     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00180"></a>00180         converter u, v, w;
-<a name="l00181"></a>00181         u.value = value;
-<a name="l00182"></a>00182         v.value = comparand;
-<a name="l00183"></a>00183         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
-<a name="l00184"></a>00184         <span class="keywordflow">return</span> w.value;
-<a name="l00185"></a>00185     }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00188"></a>00188         <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
-<a name="l00192"></a>00192         converter w;
-<a name="l00193"></a>00193         w.bits = __TBB_load_with_acquire( rep.value );
-<a name="l00194"></a>00194         <span class="keywordflow">return</span> w.value;
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="keyword">protected</span>:
-<a name="l00198"></a>00198     value_type store_with_release( value_type rhs ) {
-<a name="l00199"></a>00199         converter u;
-<a name="l00200"></a>00200         u.value = rhs;
-<a name="l00201"></a>00201         __TBB_store_with_release(rep.value,u.bits);
-<a name="l00202"></a>00202         <span class="keywordflow">return</span> rhs;
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 };
-<a name="l00205"></a>00205 
-<a name="l00207"></a>00207 
-<a name="l00210"></a>00210 <span class="keyword">template</span><<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, <span class="keyword">typename</span> StepType>
-<a name="l00211"></a>00211 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
-<a name="l00212"></a>00212 <span class="keyword">public</span>:
-<a name="l00213"></a>00213     <span class="keyword">typedef</span> I value_type;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     <span class="keyword">template</span><memory_semantics M>
-<a name="l00216"></a>00216     value_type fetch_and_add( D addend ) {
-<a name="l00217"></a>00217         <span class="keywordflow">return</span> value_type(internal::atomic_traits<<span class="keyword">sizeof</span>(value_type),M>::fetch_and_add( &this->rep.value, addend*<span class="keyword">sizeof</span>(StepType) ));
-<a name="l00218"></a>00218     }
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     value_type fetch_and_add( D addend ) {
-<a name="l00221"></a>00221         <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="keyword">template</span><memory_semantics M>
-<a name="l00225"></a>00225     value_type fetch_and_increment() {
-<a name="l00226"></a>00226         <span class="keywordflow">return</span> fetch_and_add<M>(1);
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     value_type fetch_and_increment() {
-<a name="l00230"></a>00230         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     <span class="keyword">template</span><memory_semantics M>
-<a name="l00234"></a>00234     value_type fetch_and_decrement() {
-<a name="l00235"></a>00235         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     value_type fetch_and_decrement() {
-<a name="l00239"></a>00239         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="keyword">public</span>:
-<a name="l00243"></a>00243     value_type operator+=( D addend ) {
-<a name="l00244"></a>00244         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     value_type operator-=( D addend ) {
-<a name="l00248"></a>00248         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
-<a name="l00249"></a>00249         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
-<a name="l00250"></a>00250         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
-<a name="l00251"></a>00251     }
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     value_type operator++() {
-<a name="l00254"></a>00254         <span class="keywordflow">return</span> fetch_and_add(1)+1;
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     value_type operator--() {
-<a name="l00258"></a>00258         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
-<a name="l00259"></a>00259     }
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     value_type operator++(<span class="keywordtype">int</span>) {
-<a name="l00262"></a>00262         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00263"></a>00263     }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     value_type operator--(<span class="keywordtype">int</span>) {
-<a name="l00266"></a>00266         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268 };
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
-<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="comment">// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.</span>
-<a name="l00272"></a>00272 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span>
-<a name="l00274"></a>00274 <span class="keyword">template</span><>
-<a name="l00275"></a>00275 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::operator atomic_impl<__TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
-<a name="l00276"></a>00276     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
-<a name="l00277"></a>00277 }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 <span class="keyword">template</span><>
-<a name="l00280"></a>00280 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::operator atomic_impl<unsigned __TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
-<a name="l00282"></a>00282 }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 <span class="keyword">template</span><>
-<a name="l00285"></a>00285 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::value_type atomic_impl<__TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-<a name="l00286"></a>00286     __TBB_Store8(&rep.value,rhs);
-<a name="l00287"></a>00287     <span class="keywordflow">return</span> rhs;
-<a name="l00288"></a>00288 }
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="keyword">template</span><>
-<a name="l00291"></a>00291 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::value_type atomic_impl<unsigned __TBB_LONG_LONG>::store_with_release( value_type rhs ) {
-<a name="l00292"></a>00292     __TBB_Store8(&rep.value,rhs);
-<a name="l00293"></a>00293     <span class="keywordflow">return</span> rhs;
-<a name="l00294"></a>00294 }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
-<a name="l00297"></a>00297 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 } <span class="comment">/* Internal */</span>
-<a name="l00301"></a>00301 
-<a name="l00303"></a>00303 
-<a name="l00305"></a>00305 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00306"></a><a class="code" href="a00117.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a>: internal::atomic_impl<T> {
-<a name="l00307"></a>00307     T operator=( T rhs ) {
-<a name="l00308"></a>00308         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00309"></a>00309         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311     <a class="code" href="a00117.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-<a name="l00312"></a>00312 };
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
-<a name="l00315"></a>00315 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00316"></a>00316 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
-<a name="l00317"></a>00317 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00318"></a>00318 <span class="preprocessor">    };</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span>
-<a name="l00320"></a>00320 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
-<a name="l00321"></a>00321 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
-<a name="l00322"></a>00322 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
-<a name="l00323"></a>00323 <span class="preprocessor">#else</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="comment">// Some old versions of MVSC cannot correctly compile templates with "long long".</span>
-<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
-<a name="l00328"></a>00328 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 <span class="preprocessor">#if defined(_MSC_VER) && __TBB_WORDSIZE==4</span>
-<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
-<a name="l00332"></a>00332 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
-<a name="l00333"></a>00333 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
-<a name="l00334"></a>00334 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
-<a name="l00335"></a>00335 <span class="comment">   perspective of /Wp64. */</span>
-<a name="l00336"></a>00336 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
-<a name="l00337"></a>00337 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00338"></a>00338 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
-<a name="l00339"></a>00339 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00340"></a>00340 <span class="preprocessor">    };</span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span><a class="code" href="a00229.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
-<a name="l00342"></a><a class="code" href="a00229.html#ad165cf61abbe349d413df2589679add">00342</a> __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">int</span>,ptrdiff_t)
-<a name="l00343"></a>00343 <span class="preprocessor">#else</span>
-<a name="l00344"></a>00344 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
-<a name="l00345"></a>00345 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
-<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
-<a name="l00349"></a>00349 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
-<a name="l00350"></a>00350 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
-<a name="l00351"></a>00351 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
-<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
-<a name="l00355"></a>00355 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
-<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
-<a name="l00357"></a>00357 
-<a name="l00359"></a>00359 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
-<a name="l00360"></a>00360     T* operator=( T* rhs ) {
-<a name="l00361"></a>00361         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00362"></a>00362         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00363"></a>00363     }
-<a name="l00364"></a>00364     <a class="code" href="a00117.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic<T*></a>& rhs ) {
-<a name="l00365"></a>00365         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     T* operator->()<span class="keyword"> const </span>{
-<a name="l00368"></a>00368         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00369"></a>00369     }
-<a name="l00370"></a>00370 };
-<a name="l00371"></a>00371 
-<a name="l00373"></a><a class="code" href="a00118.html">00373</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a><void*>: internal::atomic_impl<void*> {
-<a name="l00374"></a>00374     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
-<a name="l00375"></a>00375         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00376"></a>00376         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00377"></a>00377     }
-<a name="l00378"></a>00378     <a class="code" href="a00117.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic<void*></a>& rhs ) {
-<a name="l00379"></a>00379         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00380"></a>00380     }
-<a name="l00381"></a>00381 };
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 } <span class="comment">// namespace tbb</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
-<a name="l00388"></a>00388 <span class="preprocessor"></span>
-<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_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/a00255.html b/doc/html/a00263.html
similarity index 81%
rename from doc/html/a00255.html
rename to doc/html/a00263.html
index e6bd6a3..64c2887 100644
--- a/doc/html/a00255.html
+++ b/doc/html/a00263.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>_tbb_windef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -52,49 +52,46 @@
 <a name="l00031"></a>00031 <span class="preprocessor">#if !defined(_MT)</span>
 <a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#error TBB requires linkage with multithreaded C/C++ runtime library. \</span>
 <a name="l00033"></a>00033 <span class="preprocessor">       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(_DLL)</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#pragma message("Warning: Using TBB together with static C/C++ runtime library is not recommended. " \</span>
-<a name="l00036"></a>00036 <span class="preprocessor">                "Consider switching your project to multithreaded DLL runtime used by TBB.")</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="comment">// Workaround for the problem with MVSC headers failing to define namespace std</span>
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>std {
-<a name="l00041"></a>00041   using ::size_t; using ::ptrdiff_t;
-<a name="l00042"></a>00042 }
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#    if TBB_USE_DEBUG </span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#        if !defined(_DEBUG)</span>
-<a name="l00051"></a>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>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#    else</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#        if defined(_DEBUG)</span>
-<a name="l00055"></a>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>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#    ifdef _DEBUG</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#        define TBB_USE_DEBUG 1</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">    #if !__TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb_debug.lib")</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb.lib")</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="comment">// Workaround for the problem with MVSC headers failing to define namespace std</span>
+<a name="l00037"></a>00037 <span class="keyword">namespace </span>std {
+<a name="l00038"></a>00038   using ::size_t; using ::ptrdiff_t;
+<a name="l00039"></a>00039 }
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#    if TBB_USE_DEBUG </span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#        if !defined(_DEBUG)</span>
+<a name="l00048"></a>00048 <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>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#    else</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#        if defined(_DEBUG)</span>
+<a name="l00052"></a>00052 <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>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#    ifdef _DEBUG</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#        define TBB_USE_DEBUG 1</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00061"></a>00061 <span class="preprocessor">#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span>
+<a name="l00065"></a>00065 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">    #if !__TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb_debug.lib")</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb.lib")</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00257.html b/doc/html/a00265.html
similarity index 90%
rename from doc/html/a00257.html
rename to doc/html/a00265.html
index 4dfd438..bae8c20 100644
--- a/doc/html/a00257.html
+++ b/doc/html/a00265.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>aligned_space.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,14 +49,14 @@
 <a name="l00028"></a>00028 
 <a name="l00030"></a>00030 
 <a name="l00032"></a>00032 <span class="keyword">template</span><<span class="keyword">typename</span> T,size_t N>
-<a name="l00033"></a><a class="code" href="a00116.html">00033</a> <span class="keyword">class </span><a class="code" href="a00116.html">aligned_space</a> {
+<a name="l00033"></a><a class="code" href="a00121.html">00033</a> <span class="keyword">class </span><a class="code" href="a00121.html">aligned_space</a> {
 <a name="l00034"></a>00034 <span class="keyword">private</span>:
 <a name="l00035"></a>00035     <span class="keyword">typedef</span> __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
 <a name="l00036"></a>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)];
 <a name="l00037"></a>00037 <span class="keyword">public</span>:
-<a name="l00039"></a><a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
+<a name="l00039"></a><a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
 <a name="l00040"></a>00040 
-<a name="l00042"></a><a class="code" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()+N;}
+<a name="l00042"></a><a class="code" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()+N;}
 <a name="l00043"></a>00043 };
 <a name="l00044"></a>00044 
 <a name="l00045"></a>00045 } <span class="comment">// namespace tbb </span>
diff --git a/doc/html/a00266.html b/doc/html/a00266.html
index 761a180..b9a63be 100644
--- a/doc/html/a00266.html
+++ b/doc/html/a00266.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>blocked_range.h Source File</title>
+<title>atomic.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>blocked_range.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>atomic.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,83 +39,357 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_blocked_range_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_atomic_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_atomic_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00040"></a><a class="code" href="a00122.html">00040</a> <span class="keyword">class </span><a class="code" href="a00122.html">blocked_range</a> {
-<a name="l00041"></a>00041 <span class="keyword">public</span>:
-<a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
-<a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051 
-<a name="l00052"></a><a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_begin(), my_end() {}
-<a name="l00053"></a>00053 
-<a name="l00055"></a><a class="code" href="a00122.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1 ) : 
-<a name="l00056"></a>00056         my_end(end_), my_begin(begin_), my_grainsize(grainsize_) 
-<a name="l00057"></a>00057     {
-<a name="l00058"></a>00058         __TBB_ASSERT( my_grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00059"></a>00059     }
-<a name="l00060"></a>00060 
-<a name="l00062"></a><a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00024"></a>00024 <span class="preprocessor">#include <cstddef></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="preprocessor">#if _MSC_VER </span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG __int64</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG long long</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings </span>
+<a name="l00037"></a>00037 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4244 4267)</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
+<a name="l00042"></a>00042 
+<a name="l00044"></a><a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
+<a name="l00046"></a>00046     <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>,
+<a name="l00048"></a>00048     <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
+<a name="l00050"></a>00050     <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+<a name="l00051"></a>00051 };
+<a name="l00052"></a>00052 
+<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#error Do not know syntax for forcing alignment.</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
 <a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00064"></a>00064 <span class="keyword">template</span><size_t S>
+<a name="l00065"></a>00065 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
 <a name="l00066"></a>00066 
-<a name="l00068"></a>00068 
-<a name="l00069"></a><a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
-<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()), <span class="stringliteral">"size() unspecified if end()<begin()"</span> );
-<a name="l00071"></a>00071         <span class="keywordflow">return</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>(my_end-my_begin);
-<a name="l00072"></a>00072     }
-<a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078     <span class="comment">// Methods that implement Range concept</span>
-<a name="l00079"></a>00079     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 
-<a name="l00082"></a><a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin<my_end);}
-<a name="l00083"></a>00083 
-<a name="l00085"></a>00085 
-<a name="l00086"></a><a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00122.html">blocked_range</a>& r, <a class="code" href="a00165.html">split</a> ) : 
-<a name="l00092"></a>00092         my_end(r.my_end),
-<a name="l00093"></a>00093         my_begin(do_split(r)),
-<a name="l00094"></a>00094         my_grainsize(r.my_grainsize)
-<a name="l00095"></a>00095     {}
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="keyword">private</span>:
-<a name="l00099"></a>00099     Value my_end;
-<a name="l00100"></a>00100     Value my_begin;
-<a name="l00101"></a>00101     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> my_grainsize;
-<a name="l00102"></a>00102 
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <span class="keyword">static</span> Value do_split( <a class="code" href="a00122.html">blocked_range</a>& r ) {
-<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
-<a name="l00107"></a>00107         Value middle = r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
-<a name="l00108"></a>00108         r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a> = middle;
-<a name="l00109"></a>00109         <span class="keywordflow">return</span> middle;
-<a name="l00110"></a>00110     }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="keyword">template</span><<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue>
-<a name="l00113"></a>00113     <span class="keyword">friend</span> <span class="keyword">class </span>blocked_range2d;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     <span class="keyword">template</span><<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue, <span class="keyword">typename</span> PageValue>
-<a name="l00116"></a>00116     <span class="keyword">friend</span> <span class="keyword">class </span>blocked_range3d;
-<a name="l00117"></a>00117 };
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 } <span class="comment">// namespace tbb </span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range_H */</span>
+<a name="l00067"></a>00067 <span class="keyword">template</span><>
+<a name="l00068"></a>00068 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
+<a name="l00069"></a>00069     <span class="keyword">typedef</span> int8_t word;
+<a name="l00070"></a>00070     int8_t value;
+<a name="l00071"></a>00071 };
+<a name="l00072"></a>00072 <span class="keyword">template</span><>
+<a name="l00073"></a>00073 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
+<a name="l00074"></a>00074     <span class="keyword">typedef</span> int16_t word;
+<a name="l00075"></a>00075     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
+<a name="l00076"></a>00076 };
+<a name="l00077"></a>00077 <span class="keyword">template</span><>
+<a name="l00078"></a>00078 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#if _MSC_VER && __TBB_WORDSIZE==4</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
+<a name="l00081"></a>00081     <span class="keyword">typedef</span> intptr_t word;
+<a name="l00082"></a>00082 <span class="preprocessor">#else</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
+<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
+<a name="l00086"></a>00086 };
+<a name="l00087"></a>00087 <span class="keyword">template</span><>
+<a name="l00088"></a>00088 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
+<a name="l00089"></a>00089     <span class="keyword">typedef</span> int64_t word;
+<a name="l00090"></a>00090     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
+<a name="l00091"></a>00091 };
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093 <span class="keyword">template</span><size_t Size, memory_semantics M>
+<a name="l00094"></a>00094 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \</span>
+<a name="l00097"></a>00097 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                               \</span>
+<a name="l00098"></a>00098 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
+<a name="l00099"></a>00099 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00100"></a>00100 <span class="preprocessor">            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \</span>
+<a name="l00101"></a>00101 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00102"></a>00102 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00103"></a>00103 <span class="preprocessor">            return __TBB_FetchAndAdd##S##M(location,addend);                    \</span>
+<a name="l00104"></a>00104 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00105"></a>00105 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00106"></a>00106 <span class="preprocessor">            return __TBB_FetchAndStore##S##M(location,value);                   \</span>
+<a name="l00107"></a>00107 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00108"></a>00108 <span class="preprocessor">    };</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00110"></a>00110 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \</span>
+<a name="l00111"></a>00111 <span class="preprocessor">    template<memory_semantics M>                                         \</span>
+<a name="l00112"></a>00112 <span class="preprocessor">    struct atomic_traits<S,M> {                                          \</span>
+<a name="l00113"></a>00113 <span class="preprocessor">        typedef atomic_rep<S>::word word;                               \</span>
+<a name="l00114"></a>00114 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00115"></a>00115 <span class="preprocessor">            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \</span>
+<a name="l00116"></a>00116 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00117"></a>00117 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">            return __TBB_FetchAndAdd##S(location,addend);                       \</span>
+<a name="l00119"></a>00119 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00120"></a>00120 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00121"></a>00121 <span class="preprocessor">            return __TBB_FetchAndStore##S(location,value);                      \</span>
+<a name="l00122"></a>00122 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00123"></a>00123 <span class="preprocessor">    };</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>
+<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00127"></a>00127 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00128"></a>00128 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00129"></a>00129 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00130"></a>00130 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00131"></a>00131 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00132"></a>00132 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00133"></a>00133 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00134"></a>00134 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00135"></a>00135 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00136"></a>00136 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00137"></a>00137 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(1)
+<a name="l00140"></a>00140 __TBB_DECL_ATOMIC_PRIMITIVES(2)
+<a name="l00141"></a>00141 __TBB_DECL_ATOMIC_PRIMITIVES(4)
+<a name="l00142"></a>00142 __TBB_DECL_ATOMIC_PRIMITIVES(8)
+<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>
+<a name="l00146"></a>00146 
+<a name="l00148"></a>00148 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span>
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00154"></a>00154 <span class="keyword">struct </span>atomic_impl {
+<a name="l00155"></a>00155 <span class="keyword">protected</span>:
+<a name="l00156"></a>00156     atomic_rep<sizeof(T)> rep;
+<a name="l00157"></a>00157 <span class="keyword">private</span>:
+<a name="l00159"></a>00159     <span class="keyword">union </span>converter {
+<a name="l00160"></a>00160         T value;
+<a name="l00161"></a>00161         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
+<a name="l00162"></a>00162     };
+<a name="l00163"></a>00163 <span class="keyword">public</span>:
+<a name="l00164"></a>00164     <span class="keyword">typedef</span> T value_type;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     <span class="keyword">template</span><memory_semantics M>
+<a name="l00167"></a>00167     value_type fetch_and_store( value_type value ) {
+<a name="l00168"></a>00168         converter u, w;
+<a name="l00169"></a>00169         u.value = value;
+<a name="l00170"></a>00170         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
+<a name="l00171"></a>00171         <span class="keywordflow">return</span> w.value;
+<a name="l00172"></a>00172     }
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174     value_type fetch_and_store( value_type value ) {
+<a name="l00175"></a>00175         <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+<a name="l00176"></a>00176     }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178     <span class="keyword">template</span><memory_semantics M>
+<a name="l00179"></a>00179     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00180"></a>00180         converter u, v, w;
+<a name="l00181"></a>00181         u.value = value;
+<a name="l00182"></a>00182         v.value = comparand;
+<a name="l00183"></a>00183         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
+<a name="l00184"></a>00184         <span class="keywordflow">return</span> w.value;
+<a name="l00185"></a>00185     }
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00188"></a>00188         <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
+<a name="l00189"></a>00189     }
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
+<a name="l00192"></a>00192         converter w;
+<a name="l00193"></a>00193         w.bits = __TBB_load_with_acquire( rep.value );
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> w.value;
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="keyword">protected</span>:
+<a name="l00198"></a>00198     value_type store_with_release( value_type rhs ) {
+<a name="l00199"></a>00199         converter u;
+<a name="l00200"></a>00200         u.value = rhs;
+<a name="l00201"></a>00201         __TBB_store_with_release(rep.value,u.bits);
+<a name="l00202"></a>00202         <span class="keywordflow">return</span> rhs;
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 };
+<a name="l00205"></a>00205 
+<a name="l00207"></a>00207 
+<a name="l00210"></a>00210 <span class="keyword">template</span><<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, <span class="keyword">typename</span> StepType>
+<a name="l00211"></a>00211 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
+<a name="l00212"></a>00212 <span class="keyword">public</span>:
+<a name="l00213"></a>00213     <span class="keyword">typedef</span> I value_type;
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215     <span class="keyword">template</span><memory_semantics M>
+<a name="l00216"></a>00216     value_type fetch_and_add( D addend ) {
+<a name="l00217"></a>00217         <span class="keywordflow">return</span> value_type(internal::atomic_traits<<span class="keyword">sizeof</span>(value_type),M>::fetch_and_add( &this->rep.value, addend*<span class="keyword">sizeof</span>(StepType) ));
+<a name="l00218"></a>00218     }
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220     value_type fetch_and_add( D addend ) {
+<a name="l00221"></a>00221         <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
+<a name="l00222"></a>00222     }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224     <span class="keyword">template</span><memory_semantics M>
+<a name="l00225"></a>00225     value_type fetch_and_increment() {
+<a name="l00226"></a>00226         <span class="keywordflow">return</span> fetch_and_add<M>(1);
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229     value_type fetch_and_increment() {
+<a name="l00230"></a>00230         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00231"></a>00231     }
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233     <span class="keyword">template</span><memory_semantics M>
+<a name="l00234"></a>00234     value_type fetch_and_decrement() {
+<a name="l00235"></a>00235         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
+<a name="l00236"></a>00236     }
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238     value_type fetch_and_decrement() {
+<a name="l00239"></a>00239         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00240"></a>00240     }
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242 <span class="keyword">public</span>:
+<a name="l00243"></a>00243     value_type operator+=( D addend ) {
+<a name="l00244"></a>00244         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
+<a name="l00245"></a>00245     }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247     value_type operator-=( D addend ) {
+<a name="l00248"></a>00248         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
+<a name="l00249"></a>00249         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
+<a name="l00250"></a>00250         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
+<a name="l00251"></a>00251     }
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253     value_type operator++() {
+<a name="l00254"></a>00254         <span class="keywordflow">return</span> fetch_and_add(1)+1;
+<a name="l00255"></a>00255     }
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257     value_type operator--() {
+<a name="l00258"></a>00258         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
+<a name="l00259"></a>00259     }
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261     value_type operator++(<span class="keywordtype">int</span>) {
+<a name="l00262"></a>00262         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00263"></a>00263     }
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265     value_type operator--(<span class="keywordtype">int</span>) {
+<a name="l00266"></a>00266         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00267"></a>00267     }
+<a name="l00268"></a>00268 };
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
+<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="comment">// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.</span>
+<a name="l00272"></a>00272 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>
+<a name="l00274"></a>00274 <span class="keyword">template</span><>
+<a name="l00275"></a>00275 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::operator atomic_impl<__TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
+<a name="l00276"></a>00276     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279 <span class="keyword">template</span><>
+<a name="l00280"></a>00280 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::operator atomic_impl<unsigned __TBB_LONG_LONG>::value_type()<span class="keyword"> const volatile </span>{
+<a name="l00281"></a>00281     <span class="keywordflow">return</span> __TBB_Load8(&rep.value);
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 <span class="keyword">template</span><>
+<a name="l00285"></a>00285 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG>::value_type atomic_impl<__TBB_LONG_LONG>::store_with_release( value_type rhs ) {
+<a name="l00286"></a>00286     __TBB_Store8(&rep.value,rhs);
+<a name="l00287"></a>00287     <span class="keywordflow">return</span> rhs;
+<a name="l00288"></a>00288 }
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290 <span class="keyword">template</span><>
+<a name="l00291"></a>00291 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG>::value_type atomic_impl<unsigned __TBB_LONG_LONG>::store_with_release( value_type rhs ) {
+<a name="l00292"></a>00292     __TBB_Store8(&rep.value,rhs);
+<a name="l00293"></a>00293     <span class="keywordflow">return</span> rhs;
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295 
+<a name="l00296"></a>00296 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
+<a name="l00297"></a>00297 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299 } <span class="comment">/* Internal */</span>
+<a name="l00301"></a>00301 
+<a name="l00303"></a>00303 
+<a name="l00305"></a>00305 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00306"></a><a class="code" href="a00122.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00122.html">atomic</a>: internal::atomic_impl<T> {
+<a name="l00307"></a>00307     T operator=( T rhs ) {
+<a name="l00308"></a>00308         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00309"></a>00309         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00310"></a>00310     }
+<a name="l00311"></a>00311     <a class="code" href="a00122.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00122.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00312"></a>00312 };
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
+<a name="l00315"></a>00315 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00316"></a>00316 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
+<a name="l00317"></a>00317 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00318"></a>00318 <span class="preprocessor">    };</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span>
+<a name="l00320"></a>00320 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+<a name="l00322"></a>00322 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
+<a name="l00323"></a>00323 <span class="preprocessor">#else</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="comment">// Some old versions of MVSC cannot correctly compile templates with "long long".</span>
+<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
+<a name="l00326"></a>00326 
+<a name="l00327"></a>00327 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
+<a name="l00328"></a>00328 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330 <span class="preprocessor">#if defined(_MSC_VER) && __TBB_WORDSIZE==4</span>
+<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
+<a name="l00332"></a>00332 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
+<a name="l00333"></a>00333 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
+<a name="l00334"></a>00334 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
+<a name="l00335"></a>00335 <span class="comment">   perspective of /Wp64. */</span>
+<a name="l00336"></a>00336 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
+<a name="l00337"></a>00337 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00338"></a>00338 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
+<a name="l00339"></a>00339 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00340"></a>00340 <span class="preprocessor">    };</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span><a class="code" href="a00237.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
+<a name="l00342"></a><a class="code" href="a00237.html#ad165cf61abbe349d413df2589679add">00342</a> __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">int</span>,ptrdiff_t)
+<a name="l00343"></a>00343 <span class="preprocessor">#else</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
+<a name="l00345"></a>00345 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
+<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
+<a name="l00347"></a>00347 
+<a name="l00348"></a>00348 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
+<a name="l00349"></a>00349 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
+<a name="l00350"></a>00350 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
+<a name="l00351"></a>00351 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
+<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
+<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
+<a name="l00357"></a>00357 
+<a name="l00359"></a>00359 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00122.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
+<a name="l00360"></a>00360     T* operator=( T* rhs ) {
+<a name="l00361"></a>00361         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00362"></a>00362         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00363"></a>00363     }
+<a name="l00364"></a>00364     <a class="code" href="a00122.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00122.html">atomic<T*></a>& rhs ) {
+<a name="l00365"></a>00365         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00366"></a>00366     }
+<a name="l00367"></a>00367     T* operator->()<span class="keyword"> const </span>{
+<a name="l00368"></a>00368         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00369"></a>00369     }
+<a name="l00370"></a>00370 };
+<a name="l00371"></a>00371 
+<a name="l00373"></a><a class="code" href="a00123.html">00373</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00122.html">atomic</a><void*>: internal::atomic_impl<void*> {
+<a name="l00374"></a>00374     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
+<a name="l00375"></a>00375         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00376"></a>00376         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00377"></a>00377     }
+<a name="l00378"></a>00378     <a class="code" href="a00122.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00122.html">atomic<void*></a>& rhs ) {
+<a name="l00379"></a>00379         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00380"></a>00380     }
+<a name="l00381"></a>00381 };
+<a name="l00382"></a>00382 
+<a name="l00383"></a>00383 } <span class="comment">// namespace tbb</span>
+<a name="l00384"></a>00384 
+<a name="l00385"></a>00385 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span>
+<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00272.html b/doc/html/a00272.html
deleted file mode 100644
index 5ce5ba3..0000000
--- a/doc/html/a00272.html
+++ /dev/null
@@ -1,1143 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <stdexcept></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <iterator></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <string></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="keyword">namespace </span>tbb {
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_hash_compare;
-<a name="l00042"></a>00042 <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> > >
-<a name="l00043"></a>00043 <span class="keyword">class </span>concurrent_hash_map;
-<a name="l00044"></a>00044 
-<a name="l00046"></a>00046 <span class="keyword">namespace </span>internal {
-<a name="l00048"></a>00048     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00050"></a>00050     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
-<a name="l00052"></a>00052     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00053"></a>00053 
-<a name="l00055"></a>00055     <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00057"></a>00057     <span class="keyword">struct </span>hash_map_node_base : no_copy {
-<a name="l00059"></a>00059         <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
-<a name="l00061"></a>00061         <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00063"></a>00063         hash_map_node_base *next;
-<a name="l00064"></a>00064         mutex_t mutex;
-<a name="l00065"></a>00065     };
-<a name="l00067"></a>00067     <span class="keyword">static</span> hash_map_node_base *<span class="keyword">const</span> rehash_req = reinterpret_cast<hash_map_node_base*>(size_t(3));
-<a name="l00069"></a>00069     <span class="keyword">static</span> hash_map_node_base *<span class="keyword">const</span> empty_rehashed = reinterpret_cast<hash_map_node_base*>(size_t(0));
-<a name="l00071"></a>00071     <span class="keyword">class </span>hash_map_base {
-<a name="l00072"></a>00072     <span class="keyword">public</span>:
-<a name="l00074"></a>00074         <span class="keyword">typedef</span> size_t size_type;
-<a name="l00076"></a>00076         <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00078"></a>00078         <span class="keyword">typedef</span> size_t segment_index_t;
-<a name="l00080"></a>00080         <span class="keyword">typedef</span> hash_map_node_base node_base;
-<a name="l00082"></a>00082         <span class="keyword">struct </span>bucket : no_copy {
-<a name="l00084"></a>00084             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
-<a name="l00086"></a>00086             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00087"></a>00087             mutex_t mutex;
-<a name="l00088"></a>00088             node_base *node_list;
-<a name="l00089"></a>00089         };
-<a name="l00091"></a>00091         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
-<a name="l00093"></a>00093         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1<<embedded_block;
-<a name="l00095"></a>00095         <span class="keyword">static</span> size_type <span class="keyword">const</span> first_block = 8; <span class="comment">//including embedded_block. perfect with bucket size 16, so the allocations are power of 4096</span>
-<a name="l00097"></a>00097 <span class="comment"></span>        <span class="keyword">static</span> size_type <span class="keyword">const</span> pointers_per_table = <span class="keyword">sizeof</span>(segment_index_t) * 8; <span class="comment">// one segment per bit</span>
-<a name="l00099"></a>00099 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
-<a name="l00101"></a>00101         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
-<a name="l00103"></a>00103         atomic<hashcode_t> my_mask;
-<a name="l00105"></a>00105         segments_table_t my_table;
-<a name="l00107"></a>00107         atomic<size_type> my_size; <span class="comment">// It must be in separate cache line from my_mask due to performance effects</span>
-<a name="l00109"></a>00109 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
-<a name="l00110"></a>00110 
-<a name="l00112"></a>00112         hash_map_base() {
-<a name="l00113"></a>00113             std::memset( <span class="keyword">this</span>, 0, pointers_per_table*<span class="keyword">sizeof</span>(segment_ptr_t) <span class="comment">// 32*4=128   or 64*8=512</span>
-<a name="l00114"></a>00114                 + <span class="keyword">sizeof</span>(my_size) + <span class="keyword">sizeof</span>(my_mask)  <span class="comment">// 4+4 or 8+8</span>
-<a name="l00115"></a>00115                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
-<a name="l00116"></a>00116             <span class="keywordflow">for</span>( size_type i = 0; i < embedded_block; i++ ) <span class="comment">// fill the table</span>
-<a name="l00117"></a>00117                 my_table[i] = my_embedded_segment + segment_base(i);
-<a name="l00118"></a>00118             my_mask = embedded_buckets - 1;
-<a name="l00119"></a>00119             __TBB_ASSERT( embedded_block <= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
-<a name="l00120"></a>00120         }
-<a name="l00121"></a>00121 
-<a name="l00123"></a>00123         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-<a name="l00124"></a>00124             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-<a name="l00125"></a>00125         }
-<a name="l00126"></a>00126 
-<a name="l00128"></a>00128         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-<a name="l00129"></a>00129             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-<a name="l00130"></a>00130         }
-<a name="l00131"></a>00131 
-<a name="l00133"></a>00133         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-<a name="l00134"></a>00134             <span class="keywordflow">return</span> size_type(1)<<k; <span class="comment">// fake value for k==0</span>
-<a name="l00135"></a>00135         }
-<a name="l00136"></a>00136         
-<a name="l00138"></a>00138         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
-<a name="l00139"></a>00139             <span class="keywordflow">return</span> reinterpret_cast<size_t>(ptr) > size_t(63);
-<a name="l00140"></a>00140         }
-<a name="l00141"></a>00141 
-<a name="l00143"></a>00143         <span class="keyword">static</span> <span class="keywordtype">void</span> init_buckets( segment_ptr_t ptr, size_type sz, <span class="keywordtype">bool</span> is_initial ) {
-<a name="l00144"></a>00144             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
-<a name="l00145"></a>00145             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i < sz; i++, ptr++) {
-<a name="l00146"></a>00146                     *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
-<a name="l00147"></a>00147                     ptr->node_list = rehash_req;
-<a name="l00148"></a>00148                 }
-<a name="l00149"></a>00149         }
-<a name="l00150"></a>00150         
-<a name="l00152"></a>00152         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
-<a name="l00153"></a>00153             __TBB_ASSERT(b->node_list != rehash_req, NULL);
-<a name="l00154"></a>00154             n->next = b->node_list;
-<a name="l00155"></a>00155             b->node_list = n; <span class="comment">// its under lock and flag is set</span>
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157 
-<a name="l00159"></a>00159         <span class="keyword">struct </span>enable_segment_failsafe {
-<a name="l00160"></a>00160             segment_ptr_t *my_segment_ptr;
-<a name="l00161"></a>00161             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
-<a name="l00162"></a>00162             ~enable_segment_failsafe() {
-<a name="l00163"></a>00163                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
-<a name="l00164"></a>00164             }
-<a name="l00165"></a>00165         };
-<a name="l00166"></a>00166 
-<a name="l00168"></a>00168         <span class="keywordtype">void</span> enable_segment( segment_index_t k, <span class="keywordtype">bool</span> is_initial = <span class="keyword">false</span> ) {
-<a name="l00169"></a>00169             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
-<a name="l00170"></a>00170             enable_segment_failsafe watchdog( my_table, k );
-<a name="l00171"></a>00171             cache_aligned_allocator<bucket> alloc;
-<a name="l00172"></a>00172             size_type sz;
-<a name="l00173"></a>00173             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
-<a name="l00174"></a>00174             <span class="keywordflow">if</span>( k >= first_block ) {
-<a name="l00175"></a>00175                 sz = segment_size( k );
-<a name="l00176"></a>00176                 segment_ptr_t ptr = alloc.allocate( sz );
-<a name="l00177"></a>00177                 init_buckets( ptr, sz, is_initial );
-<a name="l00178"></a>00178 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>                <span class="comment">// TODO: actually, fence and notification are unnecessary here and below</span>
-<a name="l00180"></a>00180                 itt_store_pointer_with_release_v3( my_table + k, ptr );
-<a name="l00181"></a>00181 <span class="preprocessor">#else</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>                my_table[k] = ptr;<span class="comment">// my_mask has release fence</span>
-<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>                sz <<= 1;<span class="comment">// double it to get entire capacity of the container</span>
-<a name="l00185"></a>00185             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
-<a name="l00186"></a>00186                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
-<a name="l00187"></a>00187                 sz = segment_size( first_block );
-<a name="l00188"></a>00188                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
-<a name="l00189"></a>00189                 init_buckets( ptr, sz - embedded_buckets, is_initial );
-<a name="l00190"></a>00190                 ptr -= segment_base(embedded_block);
-<a name="l00191"></a>00191                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i < first_block; i++) <span class="comment">// calc the offsets</span>
-<a name="l00192"></a>00192 #<span class="keywordflow">if</span> TBB_USE_THREADING_TOOLS
-<a name="l00193"></a>00193                     itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
-<a name="l00194"></a>00194 <span class="preprocessor">#else</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span>                    my_table[i] = ptr + segment_base(i);
-<a name="l00196"></a>00196 <span class="preprocessor">#endif</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>            }
-<a name="l00198"></a>00198 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00199"></a>00199 <span class="preprocessor"></span>            itt_store_pointer_with_release_v3( &my_mask, (<span class="keywordtype">void</span>*)(sz-1) );
-<a name="l00200"></a>00200 <span class="preprocessor">#else</span>
-<a name="l00201"></a>00201 <span class="preprocessor"></span>            my_mask = sz - 1;
-<a name="l00202"></a>00202 <span class="preprocessor">#endif</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span>            watchdog.my_segment_ptr = 0;
-<a name="l00204"></a>00204         }
-<a name="l00205"></a>00205 
-<a name="l00207"></a>00207         bucket *get_bucket( hashcode_t h ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="comment">// TODO: add throw() everywhere?</span>
-<a name="l00208"></a>00208             segment_index_t s = segment_index_of( h );
-<a name="l00209"></a>00209             h -= segment_base(s);
-<a name="l00210"></a>00210             segment_ptr_t seg = my_table[s];
-<a name="l00211"></a>00211             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
-<a name="l00212"></a>00212             <span class="keywordflow">return</span> &seg[h];
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214 
-<a name="l00216"></a>00216         <span class="comment">// Splitting into two functions should help inlining</span>
-<a name="l00217"></a>00217         <span class="keyword">inline</span> <span class="keywordtype">bool</span> check_mask_race( <span class="keyword">const</span> hashcode_t h, hashcode_t &m )<span class="keyword"> const </span>{
-<a name="l00218"></a>00218             hashcode_t m_now, m_old = m;
-<a name="l00219"></a>00219 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00221"></a>00221 <span class="preprocessor">#else</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span>            m_now = my_mask;
-<a name="l00223"></a>00223 <span class="preprocessor">#endif</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( m_old != m_now )
-<a name="l00225"></a>00225                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
-<a name="l00226"></a>00226             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00227"></a>00227         }
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230         <span class="keywordtype">bool</span> check_rehashing_collision( <span class="keyword">const</span> hashcode_t h, hashcode_t m_old, hashcode_t m )<span class="keyword"> const </span>{
-<a name="l00231"></a>00231             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&m</span>
-<a name="l00232"></a>00232             <span class="keywordflow">if</span>( (h & m_old) != (h & m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
-<a name="l00233"></a>00233                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
-<a name="l00234"></a>00234                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
-<a name="l00235"></a>00235                 <span class="keywordflow">for</span>( ++m_old; !(h & m_old); m_old <<= 1 ); <span class="comment">// at maximum few rounds depending on the first block size</span>
-<a name="l00236"></a>00236                 m_old = (m_old<<1) - 1; <span class="comment">// get full mask from a bit</span>
-<a name="l00237"></a>00237                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
-<a name="l00238"></a>00238                 <span class="comment">// check whether it is rehashing/ed</span>
-<a name="l00239"></a>00239 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00240"></a>00240 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&( get_bucket(h & m_old)->node_list )) != rehash_req )
-<a name="l00241"></a>00241 <span class="preprocessor">#else</span>
-<a name="l00242"></a>00242 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( __TBB_load_with_acquire(get_bucket( h & m_old )->node_list) != rehash_req )
-<a name="l00243"></a>00243 <span class="preprocessor">#endif</span>
-<a name="l00244"></a>00244 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00245"></a>00245             }
-<a name="l00246"></a>00246             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00247"></a>00247         }
-<a name="l00248"></a>00248 
-<a name="l00250"></a>00250         segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {
-<a name="l00251"></a>00251             size_type sz = ++my_size; <span class="comment">// prefix form is to enforce allocation after the first item inserted</span>
-<a name="l00252"></a>00252             add_to_bucket( b, n );
-<a name="l00253"></a>00253             <span class="comment">// check load factor</span>
-<a name="l00254"></a>00254             <span class="keywordflow">if</span>( sz >= mask ) { <span class="comment">// TODO: add custom load_factor </span>
-<a name="l00255"></a>00255                 segment_index_t new_seg = segment_index_of( mask+1 );
-<a name="l00256"></a>00256                 __TBB_ASSERT( is_valid(my_table[new_seg-1]), <span class="stringliteral">"new allocations must not publish new mask until segment has allocated"</span>);
-<a name="l00257"></a>00257 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00258"></a>00258 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( !itt_load_pointer_v3(my_table+new_seg)
-<a name="l00259"></a>00259 #<span class="keywordflow">else</span>
-<a name="l00260"></a>00260                 <span class="keywordflow">if</span>( !my_table[new_seg]
-<a name="l00261"></a>00261 #endif
-<a name="l00262"></a>00262                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
-<a name="l00263"></a>00263                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
-<a name="l00264"></a>00264             }
-<a name="l00265"></a>00265             <span class="keywordflow">return</span> 0;
-<a name="l00266"></a>00266         }
-<a name="l00267"></a>00267 
-<a name="l00269"></a>00269         <span class="keywordtype">void</span> reserve(size_type buckets) {
-<a name="l00270"></a>00270             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
-<a name="l00271"></a>00271             <span class="keywordtype">bool</span> is_initial = !my_size;
-<a name="l00272"></a>00272             <span class="keywordflow">for</span>( size_type m = my_mask; buckets > m; m = my_mask )
-<a name="l00273"></a>00273                 enable_segment( segment_index_of( m+1 ), is_initial );
-<a name="l00274"></a>00274         }
-<a name="l00276"></a>00276         <span class="keywordtype">void</span> internal_swap(hash_map_base &table) {
-<a name="l00277"></a>00277             std::swap(this->my_mask, table.my_mask);
-<a name="l00278"></a>00278             std::swap(this->my_size, table.my_size);
-<a name="l00279"></a>00279             <span class="keywordflow">for</span>(size_type i = 0; i < embedded_buckets; i++)
-<a name="l00280"></a>00280                 std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
-<a name="l00281"></a>00281             <span class="keywordflow">for</span>(size_type i = embedded_block; i < pointers_per_table; i++)
-<a name="l00282"></a>00282                 std::swap(this->my_table[i], table.my_table[i]);
-<a name="l00283"></a>00283         }
-<a name="l00284"></a>00284     };
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00287"></a>00287     <span class="keyword">class </span>hash_map_range;
-<a name="l00288"></a>00288 
-<a name="l00290"></a>00290 
-<a name="l00292"></a>00292     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00293"></a>00293     <span class="keyword">class </span>hash_map_iterator
-<a name="l00294"></a>00294         : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
-<a name="l00295"></a>00295     {
-<a name="l00296"></a>00296         <span class="keyword">typedef</span> Container map_type;
-<a name="l00297"></a>00297         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
-<a name="l00298"></a>00298         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
-<a name="l00299"></a>00299         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00302"></a>00302         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00305"></a>00305         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00308"></a>00308         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
-<a name="l00309"></a>00309     
-<a name="l00310"></a>00310         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00311"></a>00311         <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00314"></a>00314         <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
-<a name="l00317"></a>00317             size_t k = my_index+1;
-<a name="l00318"></a>00318             <span class="keywordflow">while</span>( my_bucket && k <= my_map->my_mask ) {
-<a name="l00319"></a>00319                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00320"></a>00320                 <span class="keywordflow">if</span>( k& (k-2) ) <span class="comment">// not the beginning of a segment</span>
-<a name="l00321"></a>00321                     ++my_bucket;
-<a name="l00322"></a>00322                 <span class="keywordflow">else</span> my_bucket = my_map->get_bucket( k );
-<a name="l00323"></a>00323                 my_node = static_cast<node*>( my_bucket->node_list );
-<a name="l00324"></a>00324                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
-<a name="l00325"></a>00325                     my_index = k; <span class="keywordflow">return</span>;
-<a name="l00326"></a>00326                 }
-<a name="l00327"></a>00327                 ++k;
-<a name="l00328"></a>00328             }
-<a name="l00329"></a>00329             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
-<a name="l00330"></a>00330         }
-<a name="l00331"></a>00331 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00332"></a>00332 <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>
-<a name="l00333"></a>00333         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00130.html">tbb::concurrent_hash_map</a>;
-<a name="l00334"></a>00334 <span class="preprocessor">#else</span>
-<a name="l00335"></a>00335 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
-<a name="l00336"></a>00336 <span class="preprocessor">#endif</span>
-<a name="l00338"></a>00338 <span class="preprocessor">        const Container *my_map;</span>
-<a name="l00339"></a>00339 <span class="preprocessor"></span>
-<a name="l00341"></a>00341         size_t my_index;
-<a name="l00342"></a>00342 
-<a name="l00344"></a>00344         <span class="keyword">const</span> bucket *my_bucket;
-<a name="l00345"></a>00345 
-<a name="l00347"></a>00347         node *my_node;
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349         hash_map_iterator( <span class="keyword">const</span> Container &map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n );
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351     <span class="keyword">public</span>:
-<a name="l00353"></a>00353         hash_map_iterator() {}
-<a name="l00354"></a>00354         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator<Container,typename Container::value_type> &other ) :
-<a name="l00355"></a>00355             my_map(other.my_map),
-<a name="l00356"></a>00356             my_index(other.my_index),
-<a name="l00357"></a>00357             my_bucket(other.my_bucket),
-<a name="l00358"></a>00358             my_node(other.my_node)
-<a name="l00359"></a>00359         {}
-<a name="l00360"></a>00360         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00361"></a>00361             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
-<a name="l00362"></a>00362             <span class="keywordflow">return</span> my_node->item;
-<a name="l00363"></a>00363         }
-<a name="l00364"></a>00364         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00365"></a>00365         hash_map_iterator& operator++();
-<a name="l00366"></a>00366         
-<a name="l00368"></a>00368         Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00369"></a>00369             Value* result = &operator*();
-<a name="l00370"></a>00370             operator++();
-<a name="l00371"></a>00371             <span class="keywordflow">return</span> result;
-<a name="l00372"></a>00372         }
-<a name="l00373"></a>00373     };
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00376"></a>00376     hash_map_iterator<Container,Value>::hash_map_iterator( <span class="keyword">const</span> Container &map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n ) :
-<a name="l00377"></a>00377         my_map(&map),
-<a name="l00378"></a>00378         my_index(index),
-<a name="l00379"></a>00379         my_bucket(b),
-<a name="l00380"></a>00380         my_node( static_cast<node*>(n) )
-<a name="l00381"></a>00381     {
-<a name="l00382"></a>00382         <span class="keywordflow">if</span>( b && !hash_map_base::is_valid(n) )
-<a name="l00383"></a>00383             advance_to_next_bucket();
-<a name="l00384"></a>00384     }
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00387"></a>00387     hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
-<a name="l00388"></a>00388         my_node = static_cast<node*>( my_node->next );
-<a name="l00389"></a>00389         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
-<a name="l00390"></a>00390         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00391"></a>00391     }
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00394"></a>00394     <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 ) {
-<a name="l00395"></a>00395         <span class="keywordflow">return</span> i.my_node == j.my_node && i.my_map == j.my_map;
-<a name="l00396"></a>00396     }
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00399"></a>00399     <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 ) {
-<a name="l00400"></a>00400         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
-<a name="l00401"></a>00401     }
-<a name="l00402"></a>00402 
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00406"></a>00406     <span class="keyword">class </span>hash_map_range {
-<a name="l00407"></a>00407         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
-<a name="l00408"></a>00408         Iterator my_begin;
-<a name="l00409"></a>00409         Iterator my_end;
-<a name="l00410"></a>00410         <span class="keyword">mutable</span> Iterator my_midpoint;
-<a name="l00411"></a>00411         size_t my_grainsize;
-<a name="l00413"></a>00413         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
-<a name="l00414"></a>00414         <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
-<a name="l00415"></a>00415     <span class="keyword">public</span>:
-<a name="l00417"></a>00417         <span class="keyword">typedef</span> std::size_t size_type;
-<a name="l00418"></a>00418         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
-<a name="l00419"></a>00419         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
-<a name="l00420"></a>00420         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
-<a name="l00421"></a>00421         <span class="keyword">typedef</span> Iterator iterator;
-<a name="l00422"></a>00422 
-<a name="l00424"></a>00424         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
-<a name="l00425"></a>00425 
-<a name="l00427"></a>00427         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-<a name="l00428"></a>00428             <span class="keywordflow">return</span> my_midpoint!=my_end;
-<a name="l00429"></a>00429         }
-<a name="l00431"></a>00431         hash_map_range( hash_map_range& r, split ) : 
-<a name="l00432"></a>00432             my_end(r.my_end),
-<a name="l00433"></a>00433             my_grainsize(r.my_grainsize)
-<a name="l00434"></a>00434         {
-<a name="l00435"></a>00435             r.my_end = my_begin = r.my_midpoint;
-<a name="l00436"></a>00436             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00437"></a>00437             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00438"></a>00438             set_midpoint();
-<a name="l00439"></a>00439             r.set_midpoint();
-<a name="l00440"></a>00440         }
-<a name="l00442"></a>00442         <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00443"></a>00443         hash_map_range( hash_map_range<U>& r) : 
-<a name="l00444"></a>00444             my_begin(r.my_begin),
-<a name="l00445"></a>00445             my_end(r.my_end),
-<a name="l00446"></a>00446             my_midpoint(r.my_midpoint),
-<a name="l00447"></a>00447             my_grainsize(r.my_grainsize)
-<a name="l00448"></a>00448         {}
-<a name="l00449"></a>00449 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00451"></a>00451 <span class="preprocessor">        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize = 1 ) : </span>
-<a name="l00452"></a>00452 <span class="preprocessor"></span>            my_begin(begin_), 
-<a name="l00453"></a>00453             my_end(end_),
-<a name="l00454"></a>00454             my_grainsize(grainsize)
-<a name="l00455"></a>00455         {
-<a name="l00456"></a>00456             <span class="keywordflow">if</span>(!my_end.my_index && !my_end.my_bucket) <span class="comment">// end</span>
-<a name="l00457"></a>00457                 my_end.my_index = my_end.my_map->my_mask + 1;
-<a name="l00458"></a>00458             set_midpoint();
-<a name="l00459"></a>00459             __TBB_ASSERT( grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461 <span class="preprocessor">#endif</span>
-<a name="l00463"></a>00463 <span class="preprocessor">        hash_map_range( const map_type &map, size_type grainsize = 1 ) : </span>
-<a name="l00464"></a>00464 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
-<a name="l00465"></a>00465             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
-<a name="l00466"></a>00466             my_grainsize( grainsize )
-<a name="l00467"></a>00467         {
-<a name="l00468"></a>00468             __TBB_ASSERT( grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00469"></a>00469             set_midpoint();
-<a name="l00470"></a>00470         }
-<a name="l00471"></a>00471         <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
-<a name="l00472"></a>00472         <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
-<a name="l00474"></a>00474         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
-<a name="l00475"></a>00475     };
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00478"></a>00478     <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
-<a name="l00479"></a>00479         <span class="comment">// Split by groups of nodes</span>
-<a name="l00480"></a>00480         size_t m = my_end.my_index-my_begin.my_index;
-<a name="l00481"></a>00481         <span class="keywordflow">if</span>( m > my_grainsize ) {
-<a name="l00482"></a>00482             m = my_begin.my_index + m/2u;
-<a name="l00483"></a>00483             hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
-<a name="l00484"></a>00484             my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
-<a name="l00485"></a>00485         } <span class="keywordflow">else</span> {
-<a name="l00486"></a>00486             my_midpoint = my_end;
-<a name="l00487"></a>00487         }
-<a name="l00488"></a>00488         __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
-<a name="l00489"></a>00489             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
-<a name="l00490"></a>00490         __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
-<a name="l00491"></a>00491             <span class="stringliteral">"my_midpoint is after my_end"</span> );
-<a name="l00492"></a>00492         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
-<a name="l00493"></a>00493             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
-<a name="l00494"></a>00494     }
-<a name="l00495"></a>00495 } <span class="comment">// namespace internal</span>
-<a name="l00497"></a>00497 <span class="comment"></span>
-<a name="l00499"></a><a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">00499</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t <a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = <span class="keyword">sizeof</span>(size_t)==4? 2654435769U : 11400714819323198485ULL;
-<a name="l00501"></a>00501 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00502"></a><a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">00502</a> <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> T& t ) {
-<a name="l00503"></a>00503     <span class="keywordflow">return</span> static_cast<size_t>( t ) * <a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a>;
-<a name="l00504"></a>00504 }
-<a name="l00505"></a>00505 <span class="keyword">template</span><<span class="keyword">typename</span> P>
-<a name="l00506"></a>00506 <span class="keyword">inline</span> <span class="keyword">static</span> size_t tbb_hasher( P* ptr ) {
-<a name="l00507"></a>00507     size_t <span class="keyword">const</span> h = reinterpret_cast<size_t>( ptr );
-<a name="l00508"></a>00508     <span class="keywordflow">return</span> (h >> 3) ^ h;
-<a name="l00509"></a>00509 }
-<a name="l00510"></a>00510 <span class="keyword">template</span><<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A>
-<a name="l00511"></a>00511 <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
-<a name="l00512"></a>00512     size_t h = 0;
-<a name="l00513"></a>00513     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; c++ )
-<a name="l00514"></a>00514         h = static_cast<size_t>(*c) ^ (h * <a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a>);
-<a name="l00515"></a>00515     <span class="keywordflow">return</span> h;
-<a name="l00516"></a>00516 }
-<a name="l00517"></a>00517 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
-<a name="l00518"></a>00518 <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> std::pair<F,S>& p ) {
-<a name="l00519"></a>00519     <span class="keywordflow">return</span> <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(p.first) ^ <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(p.second);
-<a name="l00520"></a>00520 }
-<a name="l00521"></a>00521 
-<a name="l00523"></a>00523 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00524"></a><a class="code" href="a00174.html">00524</a> <span class="keyword">struct </span><a class="code" href="a00174.html">tbb_hash_compare</a> {
-<a name="l00525"></a>00525     <span class="keyword">static</span> size_t hash( <span class="keyword">const</span> T& t ) { <span class="keywordflow">return</span> <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(t); }
-<a name="l00526"></a>00526     <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; }
-<a name="l00527"></a>00527 };
-<a name="l00528"></a>00528 
-<a name="l00530"></a>00530 
-<a name="l00559"></a>00559 <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> Allocator>
-<a name="l00560"></a><a class="code" href="a00130.html">00560</a> <span class="keyword">class </span><a class="code" href="a00130.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
-<a name="l00561"></a>00561     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00562"></a>00562     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00565"></a>00565     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567 <span class="keyword">public</span>:
-<a name="l00568"></a>00568     <span class="keyword">typedef</span> Key key_type;
-<a name="l00569"></a>00569     <span class="keyword">typedef</span> T mapped_type;
-<a name="l00570"></a>00570     <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
-<a name="l00571"></a>00571     <span class="keyword">typedef</span> internal::hash_map_base::size_type size_type;
-<a name="l00572"></a>00572     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00573"></a>00573     <span class="keyword">typedef</span> value_type *pointer;
-<a name="l00574"></a>00574     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
-<a name="l00575"></a>00575     <span class="keyword">typedef</span> value_type &reference;
-<a name="l00576"></a>00576     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
-<a name="l00577"></a>00577     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
-<a name="l00578"></a>00578     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
-<a name="l00579"></a>00579     <span class="keyword">typedef</span> internal::hash_map_range<iterator> range_type;
-<a name="l00580"></a>00580     <span class="keyword">typedef</span> internal::hash_map_range<const_iterator> const_range_type;
-<a name="l00581"></a>00581     <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583 <span class="keyword">protected</span>:
-<a name="l00584"></a>00584     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00133.html">const_accessor</a>;
-<a name="l00585"></a>00585     <span class="keyword">struct </span>node;
-<a name="l00586"></a>00586     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<node>::other node_allocator_type;
-<a name="l00587"></a>00587     node_allocator_type my_allocator;
-<a name="l00588"></a>00588     HashCompare my_hash_compare;
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
-<a name="l00591"></a>00591         value_type item;
-<a name="l00592"></a>00592         node( <span class="keyword">const</span> Key &key ) : item(key, T()) {}
-<a name="l00593"></a>00593         node( <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T &t ) : item(key, t) {}
-<a name="l00594"></a>00594         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
-<a name="l00595"></a>00595         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &a ) {
-<a name="l00596"></a>00596             <span class="keywordtype">void</span> *ptr = a.allocate(1);
-<a name="l00597"></a>00597             <span class="keywordflow">if</span>(!ptr) <span class="keywordflow">throw</span> std::bad_alloc();
-<a name="l00598"></a>00598             <span class="keywordflow">return</span> ptr;
-<a name="l00599"></a>00599         }
-<a name="l00600"></a>00600         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
-<a name="l00601"></a>00601         <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); }
-<a name="l00602"></a>00602     };
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604     <span class="keywordtype">void</span> delete_node( node_base *n ) {
-<a name="l00605"></a>00605         my_allocator.destroy( static_cast<node*>(n) );
-<a name="l00606"></a>00606         my_allocator.deallocate( static_cast<node*>(n), 1);
-<a name="l00607"></a>00607     }
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609     node *search_bucket( <span class="keyword">const</span> key_type &key, bucket *b )<span class="keyword"> const </span>{
-<a name="l00610"></a>00610         node *n = static_cast<node*>( b->node_list );
-<a name="l00611"></a>00611         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
-<a name="l00612"></a>00612             n = static_cast<node*>( n->next );
-<a name="l00613"></a>00613         __TBB_ASSERT(n != internal::rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
-<a name="l00614"></a>00614         <span class="keywordflow">return</span> n;
-<a name="l00615"></a>00615     }
-<a name="l00616"></a>00616 
-<a name="l00618"></a><a class="code" href="a00132.html">00618</a>     <span class="keyword">class </span><a class="code" href="a00132.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
-<a name="l00619"></a>00619         <span class="keywordtype">bool</span> my_is_writer; <span class="comment">// TODO: use it from base type</span>
-<a name="l00620"></a>00620         bucket *my_b;
-<a name="l00621"></a>00621     <span class="keyword">public</span>:
-<a name="l00622"></a>00622         <a class="code" href="a00132.html">bucket_accessor</a>( <a class="code" href="a00130.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) { <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
-<a name="l00624"></a><a class="code" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">00624</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00130.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) {
-<a name="l00625"></a>00625             my_b = base->get_bucket( h );
-<a name="l00626"></a>00626 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00627"></a>00627 <span class="preprocessor"></span>            <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00628"></a>00628             <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&my_b->node_list) == internal::rehash_req
-<a name="l00629"></a>00629 #<span class="keywordflow">else</span>
-<a name="l00630"></a>00630             <span class="keywordflow">if</span>( __TBB_load_with_acquire(my_b->node_list) == internal::rehash_req
-<a name="l00631"></a>00631 #endif
-<a name="l00632"></a>00632                 && try_acquire( my_b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
-<a name="l00633"></a>00633             {
-<a name="l00634"></a>00634                 <span class="keywordflow">if</span>( my_b->node_list == internal::rehash_req ) base-><a class="code" href="a00130.html#f2fe44bde2158a2f2a315c6457ebd030">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
-<a name="l00635"></a>00635                 my_is_writer = <span class="keyword">true</span>;
-<a name="l00636"></a>00636             }
-<a name="l00637"></a>00637             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b->mutex, <span class="comment">/*write=*/</span>my_is_writer = writer );
-<a name="l00638"></a>00638             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
-<a name="l00639"></a>00639         }
-<a name="l00641"></a><a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">00641</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> my_is_writer; }
-<a name="l00643"></a><a class="code" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">00643</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
-<a name="l00644"></a>00644         <span class="comment">// TODO: optimize out</span>
-<a name="l00645"></a>00645         <span class="keywordtype">bool</span> upgrade_to_writer() { my_is_writer = <span class="keyword">true</span>; <span class="keywordflow">return</span> bucket::scoped_t::upgrade_to_writer(); }
-<a name="l00646"></a>00646     };
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648     <span class="comment">// TODO refactor to hash_base</span>
-<a name="l00649"></a>00649     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
-<a name="l00650"></a>00650         __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
-<a name="l00651"></a>00651         __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
-<a name="l00652"></a>00652         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); <span class="comment">// mark rehashed</span>
-<a name="l00653"></a>00653         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655         bucket_accessor b_old( <span class="keyword">this</span>, h & mask );
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657         mask = (mask<<1) | 1; <span class="comment">// get full mask for new bucket</span>
-<a name="l00658"></a>00658         __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
-<a name="l00659"></a>00659     restart:
-<a name="l00660"></a>00660         <span class="keywordflow">for</span>( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {
-<a name="l00661"></a>00661             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l00662"></a>00662             <span class="keywordflow">if</span>( (c & mask) == h ) {
-<a name="l00663"></a>00663                 <span class="keywordflow">if</span>( !b_old.is_writer() )
-<a name="l00664"></a>00664                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
-<a name="l00665"></a>00665                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
-<a name="l00666"></a>00666                     }
-<a name="l00667"></a>00667                 *p = n->next; <span class="comment">// exclude from b_old</span>
-<a name="l00668"></a>00668                 add_to_bucket( b_new, n );
-<a name="l00669"></a>00669             } <span class="keywordflow">else</span> p = &n->next; <span class="comment">// iterate to next item</span>
-<a name="l00670"></a>00670         }
-<a name="l00671"></a>00671     }
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 <span class="keyword">public</span>:
-<a name="l00674"></a>00674     
-<a name="l00675"></a>00675     <span class="keyword">class </span>accessor;
-<a name="l00677"></a><a class="code" href="a00133.html">00677</a>     <span class="keyword">class </span><a class="code" href="a00133.html">const_accessor</a> {
-<a name="l00678"></a>00678         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00130.html">concurrent_hash_map</a><Key,T,HashCompare,Allocator>;
-<a name="l00679"></a>00679         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00131.html">accessor</a>;
-<a name="l00680"></a>00680         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00131.html">accessor</a> & ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
-<a name="l00681"></a>00681         <a class="code" href="a00133.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00131.html">accessor</a> & );       <span class="comment">// Deny access</span>
-<a name="l00682"></a>00682     <span class="keyword">public</span>:
-<a name="l00684"></a><a class="code" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">00684</a>         <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
-<a name="l00685"></a>00685 
-<a name="l00687"></a><a class="code" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">00687</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
-<a name="l00688"></a>00688 
-<a name="l00690"></a><a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">00690</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00691"></a>00691             <span class="keywordflow">if</span>( my_node ) {
-<a name="l00692"></a>00692                 my_lock.release();
-<a name="l00693"></a>00693                 my_node = 0;
-<a name="l00694"></a>00694             }
-<a name="l00695"></a>00695         }
-<a name="l00696"></a>00696 
-<a name="l00698"></a><a class="code" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">00698</a>         const_reference operator*()<span class="keyword"> const </span>{
-<a name="l00699"></a>00699             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00700"></a>00700             <span class="keywordflow">return</span> my_node->item;
-<a name="l00701"></a>00701         }
-<a name="l00702"></a>00702 
-<a name="l00704"></a><a class="code" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">00704</a>         const_pointer operator->()<span class="keyword"> const </span>{
-<a name="l00705"></a>00705             <span class="keywordflow">return</span> &operator*();
-<a name="l00706"></a>00706         }
-<a name="l00707"></a>00707 
-<a name="l00709"></a><a class="code" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">00709</a>         <a class="code" href="a00133.html">const_accessor</a>() : my_node(NULL) {}
-<a name="l00710"></a>00710 
-<a name="l00712"></a><a class="code" href="a00133.html#e002771760f510e06c03e0a198286172">00712</a>         ~<a class="code" href="a00133.html">const_accessor</a>() {
-<a name="l00713"></a>00713             my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
-<a name="l00714"></a>00714         }
-<a name="l00715"></a>00715     <span class="keyword">private</span>:
-<a name="l00716"></a>00716         node *my_node;
-<a name="l00717"></a>00717         <span class="keyword">typename</span> node::scoped_t my_lock;
-<a name="l00718"></a>00718         hashcode_t my_hash;
-<a name="l00719"></a>00719     };
-<a name="l00720"></a>00720 
-<a name="l00722"></a><a class="code" href="a00131.html">00722</a>     <span class="keyword">class </span><a class="code" href="a00131.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00133.html">const_accessor</a> {
-<a name="l00723"></a>00723     <span class="keyword">public</span>:
-<a name="l00725"></a><a class="code" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">00725</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
-<a name="l00726"></a>00726 
-<a name="l00728"></a><a class="code" href="a00131.html#03a091f7355a3c0c03f839893695f372">00728</a>         reference operator*()<span class="keyword"> const </span>{
-<a name="l00729"></a>00729             __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00730"></a>00730             <span class="keywordflow">return</span> this->my_node->item;
-<a name="l00731"></a>00731         }
-<a name="l00732"></a>00732 
-<a name="l00734"></a><a class="code" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">00734</a>         pointer operator->()<span class="keyword"> const </span>{
-<a name="l00735"></a>00735             <span class="keywordflow">return</span> &operator*();
-<a name="l00736"></a>00736         }
-<a name="l00737"></a>00737     };
-<a name="l00738"></a>00738 
-<a name="l00740"></a><a class="code" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">00740</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00741"></a>00741         : my_allocator(a)
-<a name="l00742"></a>00742     {}
-<a name="l00743"></a>00743 
-<a name="l00745"></a><a class="code" href="a00130.html#c1bf3c669935aceb1dc0169e3a19e0be">00745</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00746"></a>00746         : my_allocator(a)
-<a name="l00747"></a>00747     {
-<a name="l00748"></a>00748         reserve( n );
-<a name="l00749"></a>00749     }
-<a name="l00750"></a>00750 
-<a name="l00752"></a><a class="code" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">00752</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00753"></a>00753         : my_allocator(a)
-<a name="l00754"></a>00754     {
-<a name="l00755"></a>00755         internal_copy(table);
-<a name="l00756"></a>00756     }
-<a name="l00757"></a>00757 
-<a name="l00759"></a>00759     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00760"></a><a class="code" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">00760</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00761"></a>00761         : my_allocator(a)
-<a name="l00762"></a>00762     {
-<a name="l00763"></a>00763         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
-<a name="l00764"></a>00764         internal_copy(first, last);
-<a name="l00765"></a>00765     }
-<a name="l00766"></a>00766 
-<a name="l00768"></a><a class="code" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">00768</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>& table ) {
-<a name="l00769"></a>00769         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
-<a name="l00770"></a>00770             clear();
-<a name="l00771"></a>00771             internal_copy(table);
-<a name="l00772"></a>00772         } 
-<a name="l00773"></a>00773         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00774"></a>00774     }
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776 
-<a name="l00778"></a>00778     <span class="keywordtype">void</span> clear();
-<a name="l00779"></a>00779 
-<a name="l00781"></a><a class="code" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">00781</a>     ~<a class="code" href="a00130.html">concurrent_hash_map</a>() { clear(); }
-<a name="l00782"></a>00782 
-<a name="l00783"></a>00783     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00784"></a>00784     <span class="comment">// Parallel algorithm support</span>
-<a name="l00785"></a>00785     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00786"></a>00786     range_type range( size_type grainsize=1 ) {
-<a name="l00787"></a>00787         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00788"></a>00788     }
-<a name="l00789"></a>00789     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
-<a name="l00790"></a>00790         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00794"></a>00794     <span class="comment">// STL support - not thread-safe methods</span>
-<a name="l00795"></a>00795     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00796"></a>00796     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
-<a name="l00797"></a>00797     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
-<a name="l00798"></a>00798     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
-<a name="l00799"></a>00799     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,0,0);}
-<a name="l00800"></a>00800     std::pair<iterator, iterator> equal_range( <span class="keyword">const</span> Key& key ) { <span class="keywordflow">return</span> internal_equal_range(key, end()); }
-<a name="l00801"></a>00801     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()); }
-<a name="l00802"></a>00802     
-<a name="l00804"></a><a class="code" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">00804</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
-<a name="l00805"></a>00805 
-<a name="l00807"></a><a class="code" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">00807</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
-<a name="l00808"></a>00808 
-<a name="l00810"></a><a class="code" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">00810</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(node);}
-<a name="l00811"></a>00811 
-<a name="l00813"></a><a class="code" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">00813</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00814"></a>00814 
-<a name="l00816"></a>00816     <span class="keywordtype">void</span> swap(<a class="code" href="a00130.html">concurrent_hash_map</a> &table);
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00819"></a>00819     <span class="comment">// concurrent map operations</span>
-<a name="l00820"></a>00820     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00821"></a>00821 
-<a name="l00823"></a><a class="code" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">00823</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00824"></a>00824         <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>, key, NULL, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00825"></a>00825     }
-<a name="l00826"></a>00826 
-<a name="l00828"></a>00828 
-<a name="l00829"></a><a class="code" href="a00130.html#9fa1ca60af4ef761a100617b27718585">00829</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00133.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00830"></a>00830         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00831"></a>00831         <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>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00832"></a>00832     }
-<a name="l00833"></a>00833 
-<a name="l00835"></a>00835 
-<a name="l00836"></a><a class="code" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">00836</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00131.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00837"></a>00837         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00838"></a>00838         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">false</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l00839"></a>00839     }
-<a name="l00840"></a>00840         
-<a name="l00842"></a>00842 
-<a name="l00843"></a><a class="code" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">00843</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00133.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00844"></a>00844         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00845"></a>00845         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00846"></a>00846     }
-<a name="l00847"></a>00847 
-<a name="l00849"></a>00849 
-<a name="l00850"></a><a class="code" href="a00130.html#8ea81ff7fea044f859273b354c91c185">00850</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00131.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00851"></a>00851         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00852"></a>00852         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l00853"></a>00853     }
-<a name="l00854"></a>00854 
-<a name="l00856"></a>00856 
-<a name="l00857"></a><a class="code" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">00857</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00133.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00858"></a>00858         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00859"></a>00859         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00860"></a>00860     }
-<a name="l00861"></a>00861 
-<a name="l00863"></a>00863 
-<a name="l00864"></a><a class="code" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">00864</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00131.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00865"></a>00865         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
-<a name="l00866"></a>00866         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l00867"></a>00867     }
-<a name="l00868"></a>00868 
-<a name="l00870"></a>00870 
-<a name="l00871"></a><a class="code" href="a00130.html#3034a308bc839695a5714a107380c4b9">00871</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
-<a name="l00872"></a>00872         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00873"></a>00873     }
-<a name="l00874"></a>00874 
-<a name="l00876"></a>00876     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00877"></a><a class="code" href="a00130.html#7b42dba04d71e1367f0d542087906178">00877</a>     <span class="keywordtype">void</span> insert(I first, I last) {
-<a name="l00878"></a>00878         <span class="keywordflow">for</span>(; first != last; ++first)
-<a name="l00879"></a>00879             insert( *first );
-<a name="l00880"></a>00880     }
-<a name="l00881"></a>00881 
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
-<a name="l00885"></a>00885 
-<a name="l00887"></a>00887 
-<a name="l00888"></a><a class="code" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">00888</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00133.html">const_accessor</a>& item_accessor ) {
-<a name="l00889"></a>00889         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
-<a name="l00890"></a>00890     }
-<a name="l00891"></a>00891 
-<a name="l00893"></a>00893 
-<a name="l00894"></a><a class="code" href="a00130.html#b65abfa291da566617dd58dfb349630a">00894</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00131.html">accessor</a>& item_accessor ) {
-<a name="l00895"></a>00895         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
-<a name="l00896"></a>00896     }
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898 <span class="keyword">protected</span>:
-<a name="l00900"></a>00900     <span class="keywordtype">bool</span> lookup( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T *t, const_accessor *result, <span class="keywordtype">bool</span> write );
-<a name="l00901"></a>00901 
-<a name="l00903"></a>00903     <span class="keywordtype">bool</span> exclude( const_accessor &item_accessor, <span class="keywordtype">bool</span> readonly );
-<a name="l00904"></a>00904 
-<a name="l00906"></a>00906     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00907"></a>00907     std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
-<a name="l00908"></a>00908 
-<a name="l00910"></a>00910     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>& source );
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00913"></a>00913     <span class="keywordtype">void</span> internal_copy(I first, I last);
-<a name="l00914"></a>00914 
-<a name="l00916"></a>00916 
-<a name="l00918"></a><a class="code" href="a00130.html#f0cdf5930563a49ffe827c520e948e01">00918</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
-<a name="l00919"></a>00919         hashcode_t h = my_hash_compare.hash( key );
-<a name="l00920"></a>00920 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00921"></a>00921 <span class="preprocessor"></span>        hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00922"></a>00922 <span class="preprocessor">#else</span>
-<a name="l00923"></a>00923 <span class="preprocessor"></span>        hashcode_t m = my_mask;
-<a name="l00924"></a>00924 <span class="preprocessor">#endif</span>
-<a name="l00925"></a>00925 <span class="preprocessor"></span>        node *n;
-<a name="l00926"></a>00926     restart:
-<a name="l00927"></a>00927         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00928"></a>00928         bucket *b = get_bucket( h & m );
-<a name="l00929"></a>00929 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00930"></a>00930 <span class="preprocessor"></span>        <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00931"></a>00931         <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&b->node_list) == internal::rehash_req )
-<a name="l00932"></a>00932 <span class="preprocessor">#else</span>
-<a name="l00933"></a>00933 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( __TBB_load_with_acquire(b->node_list) == internal::rehash_req )
-<a name="l00934"></a>00934 <span class="preprocessor">#endif</span>
-<a name="l00935"></a>00935 <span class="preprocessor"></span>        {
-<a name="l00936"></a>00936             bucket::scoped_t lock;
-<a name="l00937"></a>00937             <span class="keywordflow">if</span>( lock.try_acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) ) {
-<a name="l00938"></a>00938                 <span class="keywordflow">if</span>( b->node_list == internal::rehash_req)
-<a name="l00939"></a>00939                     const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->rehash_bucket( b, h & m ); <span class="comment">//recursive rehashing</span>
-<a name="l00940"></a>00940             }
-<a name="l00941"></a>00941             <span class="keywordflow">else</span> lock.acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00942"></a>00942             __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);
-<a name="l00943"></a>00943         }
-<a name="l00944"></a>00944         n = search_bucket( key, b );
-<a name="l00945"></a>00945         <span class="keywordflow">if</span>( n )
-<a name="l00946"></a>00946             <span class="keywordflow">return</span> &n->item;
-<a name="l00947"></a>00947         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l00948"></a>00948             <span class="keywordflow">goto</span> restart;
-<a name="l00949"></a>00949         <span class="keywordflow">return</span> 0;
-<a name="l00950"></a>00950     }
-<a name="l00951"></a>00951 };
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00954"></a>00954 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
-<a name="l00955"></a>00955 <span class="preprocessor">    #pragma warning( push )</span>
-<a name="l00956"></a>00956 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
-<a name="l00957"></a>00957 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00958"></a>00958 <span class="preprocessor"></span>
-<a name="l00959"></a>00959 <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="l00960"></a><a class="code" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">00960</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::lookup</a>( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T *t, <a class="code" href="a00133.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
-<a name="l00961"></a>00961     __TBB_ASSERT( !result || !result-><a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
-<a name="l00962"></a>00962     segment_index_t grow_segment;
-<a name="l00963"></a>00963     <span class="keywordtype">bool</span> return_value;
-<a name="l00964"></a>00964     node *n, *tmp_n = 0;
-<a name="l00965"></a>00965     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l00966"></a>00966 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00967"></a>00967 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
-<a name="l00968"></a>00968 <span class="preprocessor">#else</span>
-<a name="l00969"></a>00969 <span class="preprocessor"></span>    hashcode_t m = my_mask;
-<a name="l00970"></a>00970 <span class="preprocessor">#endif</span>
-<a name="l00971"></a>00971 <span class="preprocessor"></span>    restart:
-<a name="l00972"></a>00972     {<span class="comment">//lock scope</span>
-<a name="l00973"></a>00973         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00974"></a>00974         return_value = <span class="keyword">false</span>;
-<a name="l00975"></a>00975         <span class="comment">// get bucket</span>
-<a name="l00976"></a>00976         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l00977"></a>00977 
-<a name="l00978"></a>00978         <span class="comment">// find a node</span>
-<a name="l00979"></a>00979         n = search_bucket( key, b() );
-<a name="l00980"></a>00980         <span class="keywordflow">if</span>( op_insert ) {
-<a name="l00981"></a>00981             <span class="comment">// [opt] insert a key</span>
-<a name="l00982"></a>00982             <span class="keywordflow">if</span>( !n ) {
-<a name="l00983"></a>00983                 <span class="keywordflow">if</span>( !tmp_n ) {
-<a name="l00984"></a>00984                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
-<a name="l00985"></a>00985                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
-<a name="l00986"></a>00986                 }
-<a name="l00987"></a>00987                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() && !b.<a class="code" href="a00132.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) { <span class="comment">// TODO: improved insertion</span>
-<a name="l00988"></a>00988                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
-<a name="l00989"></a>00989                     n = search_bucket( key, b() );
-<a name="l00990"></a>00990                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
-<a name="l00991"></a>00991                         b.downgrade_to_reader();
-<a name="l00992"></a>00992                         <span class="keywordflow">goto</span> exists;
-<a name="l00993"></a>00993                     }
-<a name="l00994"></a>00994                 }
-<a name="l00995"></a>00995                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
-<a name="l00996"></a>00996                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
-<a name="l00997"></a>00997                 <span class="comment">// insert and set flag to grow the container</span>
-<a name="l00998"></a>00998                 grow_segment = insert_new_node( b(), n = tmp_n, m );
-<a name="l00999"></a>00999                 tmp_n = 0;
-<a name="l01000"></a>01000                 return_value = <span class="keyword">true</span>;
-<a name="l01001"></a>01001             } <span class="keywordflow">else</span> {
-<a name="l01002"></a>01002     exists:     grow_segment = 0;
-<a name="l01003"></a>01003             }
-<a name="l01004"></a>01004         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
-<a name="l01005"></a>01005             <span class="keywordflow">if</span>( !n ) {
-<a name="l01006"></a>01006                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01007"></a>01007                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
-<a name="l01008"></a>01008                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01009"></a>01009             }
-<a name="l01010"></a>01010             return_value = <span class="keyword">true</span>;
-<a name="l01011"></a>01011             grow_segment = 0;
-<a name="l01012"></a>01012         }
-<a name="l01013"></a>01013         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
-<a name="l01014"></a>01014         <span class="comment">// TODO: the following seems as generic/regular operation</span>
-<a name="l01015"></a>01015         <span class="comment">// acquire the item</span>
-<a name="l01016"></a>01016         <span class="keywordflow">if</span>( !result-><a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n->mutex, write ) ) {
-<a name="l01017"></a>01017             <span class="comment">// we are unlucky, prepare for longer wait</span>
-<a name="l01018"></a>01018             <a class="code" href="a00119.html">internal::atomic_backoff</a> trials;
-<a name="l01019"></a>01019             <span class="keywordflow">do</span> {
-<a name="l01020"></a>01020                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
-<a name="l01021"></a>01021                     <span class="comment">// the wait takes really long, restart the operation</span>
-<a name="l01022"></a>01022                     b.release();
-<a name="l01023"></a>01023                     __TBB_ASSERT( !op_insert || !return_value, <span class="stringliteral">"Can't acquire new item in locked bucket?"</span> );
-<a name="l01024"></a>01024                     __TBB_Yield();
-<a name="l01025"></a>01025                     m = my_mask;
-<a name="l01026"></a>01026                     <span class="keywordflow">goto</span> restart;
-<a name="l01027"></a>01027                 }
-<a name="l01028"></a>01028             } <span class="keywordflow">while</span>( !result-><a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n->mutex, write ) );
-<a name="l01029"></a>01029         }
-<a name="l01030"></a>01030     }<span class="comment">//lock scope</span>
-<a name="l01031"></a>01031     result-><a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = n;
-<a name="l01032"></a>01032     result-><a class="code" href="a00133.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a> = h;
-<a name="l01033"></a>01033 check_growth:
-<a name="l01034"></a>01034     <span class="comment">// [opt] grow the container</span>
-<a name="l01035"></a>01035     <span class="keywordflow">if</span>( grow_segment )
-<a name="l01036"></a>01036         enable_segment( grow_segment );
-<a name="l01037"></a>01037     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
-<a name="l01038"></a>01038         delete_node( tmp_n );
-<a name="l01039"></a>01039     <span class="keywordflow">return</span> return_value;
-<a name="l01040"></a>01040 }
-<a name="l01041"></a>01041 
-<a name="l01042"></a>01042 <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="l01043"></a>01043 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01044"></a><a class="code" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">01044</a> std::pair<I, I> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range</a>( <span class="keyword">const</span> Key& key, I end )<span class="keyword"> const </span>{
-<a name="l01045"></a>01045     hashcode_t h = my_hash_compare.hash( key );
-<a name="l01046"></a>01046     hashcode_t m = my_mask;
-<a name="l01047"></a>01047     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01048"></a>01048     h &= m;
-<a name="l01049"></a>01049     bucket *b = get_bucket( h );
-<a name="l01050"></a>01050     <span class="keywordflow">while</span>( b->node_list == internal::rehash_req ) {
-<a name="l01051"></a>01051         m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l01052"></a>01052         b = get_bucket( h &= m );
-<a name="l01053"></a>01053     }
-<a name="l01054"></a>01054     node *n = search_bucket( key, b );
-<a name="l01055"></a>01055     <span class="keywordflow">if</span>( !n )
-<a name="l01056"></a>01056         <span class="keywordflow">return</span> std::make_pair(end, end);
-<a name="l01057"></a>01057     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
-<a name="l01058"></a>01058     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
-<a name="l01059"></a>01059 }
-<a name="l01060"></a>01060 
-<a name="l01061"></a>01061 <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="l01062"></a><a class="code" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">01062</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00133.html">const_accessor</a> &item_accessor, <span class="keywordtype">bool</span> readonly ) {
-<a name="l01063"></a>01063     __TBB_ASSERT( item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
-<a name="l01064"></a>01064     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>;
-<a name="l01065"></a>01065     item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = NULL; <span class="comment">// we ought release accessor anyway</span>
-<a name="l01066"></a>01066     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00133.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a>;
-<a name="l01067"></a>01067     hashcode_t m = my_mask;
-<a name="l01068"></a>01068     <span class="keywordflow">do</span> {
-<a name="l01069"></a>01069         <span class="comment">// get bucket</span>
-<a name="l01070"></a>01070         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
-<a name="l01071"></a>01071         node_base **p = &b()->node_list;
-<a name="l01072"></a>01072         <span class="keywordflow">while</span>( *p && *p != n )
-<a name="l01073"></a>01073             p = &(*p)->next;
-<a name="l01074"></a>01074         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
-<a name="l01075"></a>01075             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01076"></a>01076                 <span class="keywordflow">continue</span>;
-<a name="l01077"></a>01077             item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
-<a name="l01078"></a>01078             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01079"></a>01079         }
-<a name="l01080"></a>01080         __TBB_ASSERT( *p == n, NULL );
-<a name="l01081"></a>01081         *p = n->next; <span class="comment">// remove from container</span>
-<a name="l01082"></a>01082         my_size--;
-<a name="l01083"></a>01083         <span class="keywordflow">break</span>;
-<a name="l01084"></a>01084     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
-<a name="l01085"></a>01085     <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
-<a name="l01086"></a>01086         item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
-<a name="l01087"></a>01087     item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
-<a name="l01088"></a>01088     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
-<a name="l01089"></a>01089     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01090"></a>01090 }
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092 <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="l01093"></a><a class="code" href="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">01093</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
-<a name="l01094"></a>01094     node_base *n;
-<a name="l01095"></a>01095     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l01096"></a>01096     hashcode_t m = my_mask;
-<a name="l01097"></a>01097 restart:
-<a name="l01098"></a>01098     {<span class="comment">//lock scope</span>
-<a name="l01099"></a>01099         <span class="comment">// get bucket</span>
-<a name="l01100"></a>01100         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l01101"></a>01101     search:
-<a name="l01102"></a>01102         node_base **p = &b()->node_list;
-<a name="l01103"></a>01103         n = *p;
-<a name="l01104"></a>01104         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
-<a name="l01105"></a>01105             p = &n->next;
-<a name="l01106"></a>01106             n = *p;
-<a name="l01107"></a>01107         }
-<a name="l01108"></a>01108         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
-<a name="l01109"></a>01109             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01110"></a>01110                 <span class="keywordflow">goto</span> restart;
-<a name="l01111"></a>01111             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01112"></a>01112         }
-<a name="l01113"></a>01113         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() && !b.<a class="code" href="a00132.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) {
-<a name="l01114"></a>01114             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
-<a name="l01115"></a>01115                 <span class="keywordflow">goto</span> restart;
-<a name="l01116"></a>01116             <span class="keywordflow">goto</span> search;
-<a name="l01117"></a>01117         }
-<a name="l01118"></a>01118         *p = n->next;
-<a name="l01119"></a>01119         my_size--;
-<a name="l01120"></a>01120     }
-<a name="l01121"></a>01121     {
-<a name="l01122"></a>01122         <span class="keyword">typename</span> node::scoped_t item_locker( n->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l01123"></a>01123     }
-<a name="l01124"></a>01124     <span class="comment">// note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!</span>
-<a name="l01125"></a>01125     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
-<a name="l01126"></a>01126     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01127"></a>01127 }
-<a name="l01128"></a>01128 
-<a name="l01129"></a>01129 <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="l01130"></a>01130 <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
-<a name="l01131"></a>01131     std::swap(this->my_allocator, table.<a class="code" href="a00130.html#964dbe9bfcb2ac0157f8b77f252f951b">my_allocator</a>);
-<a name="l01132"></a>01132     std::swap(this->my_hash_compare, table.<a class="code" href="a00130.html#1d13c1f34b3826f9235b82ea90818169">my_hash_compare</a>);
-<a name="l01133"></a>01133     internal_swap(table);
-<a name="l01134"></a>01134 }
-<a name="l01135"></a>01135 
-<a name="l01136"></a>01136 <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="l01137"></a><a class="code" href="a00130.html#36bcd50fd5383f3682032323b2d74333">01137</a> <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
-<a name="l01138"></a>01138     hashcode_t m = my_mask;
-<a name="l01139"></a>01139     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01140"></a>01140 <span class="preprocessor">#if TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01141"></a>01141 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01142"></a>01142 <span class="preprocessor"></span>    <span class="keywordtype">int</span> <a class="code" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a> = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; <span class="comment">// usage statistics</span>
-<a name="l01143"></a>01143     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-<a name="l01144"></a>01144 <span class="preprocessor">#endif</span>
-<a name="l01145"></a>01145 <span class="preprocessor"></span>    <span class="comment">// check consistency</span>
-<a name="l01146"></a>01146     <span class="keywordflow">for</span>( segment_index_t b = 0; b <= m; b++ ) {
-<a name="l01147"></a>01147         node_base *n = get_bucket(b)->node_list;
-<a name="l01148"></a>01148 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01149"></a>01149 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
-<a name="l01150"></a>01150         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == internal::rehash_req ) buckets--;
-<a name="l01151"></a>01151         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
-<a name="l01152"></a>01152 #endif
-<a name="l01153"></a>01153         <span class="keywordflow">for</span>(; is_valid(n); n = n->next ) {
-<a name="l01154"></a>01154             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l01155"></a>01155             h &= m;
-<a name="l01156"></a>01156             __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, <span class="stringliteral">"Rehashing is not finished until serial stage due to concurrent or unexpectedly terminated operation"</span> );
-<a name="l01157"></a>01157         }
-<a name="l01158"></a>01158     }
-<a name="l01159"></a>01159 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01160"></a>01160 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > size) empty_buckets -= buckets - size;
-<a name="l01161"></a>01161     <span class="keywordflow">else</span> overpopulated_buckets -= size - buckets; <span class="comment">// TODO: load_factor?</span>
-<a name="l01162"></a>01162     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets >= size || 2*overpopulated_buckets > size ) ) {
-<a name="l01163"></a>01163         internal::runtime_warning(
-<a name="l01164"></a>01164             <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d"</span>,
-<a name="l01165"></a>01165             <span class="keyword">typeid</span>(*this).name(), size, empty_buckets, overpopulated_buckets );
-<a name="l01166"></a>01166         reported = <span class="keyword">true</span>;
-<a name="l01167"></a>01167     }
-<a name="l01168"></a>01168 <span class="preprocessor">#endif</span>
-<a name="l01169"></a>01169 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01170"></a>01170 <span class="preprocessor"></span>    my_size = 0;
-<a name="l01171"></a>01171     segment_index_t s = segment_index_of( m );
-<a name="l01172"></a>01172     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01173"></a>01173     <a class="code" href="a00125.html">cache_aligned_allocator<bucket></a> alloc;
-<a name="l01174"></a>01174     <span class="keywordflow">do</span> {
-<a name="l01175"></a>01175         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01176"></a>01176         segment_ptr_t buckets = my_table[s];
-<a name="l01177"></a>01177         size_type sz = segment_size( s ? s : 1 );
-<a name="l01178"></a>01178         <span class="keywordflow">for</span>( segment_index_t i = 0; i < sz; i++ )
-<a name="l01179"></a>01179             <span class="keywordflow">for</span>( node_base *n = buckets[i].node_list; is_valid(n); n = buckets[i].node_list ) {
-<a name="l01180"></a>01180                 buckets[i].node_list = n->next;
-<a name="l01181"></a>01181                 delete_node( n );
-<a name="l01182"></a>01182             }
-<a name="l01183"></a>01183         <span class="keywordflow">if</span>( s >= first_block) <span class="comment">// the first segment or the next</span>
-<a name="l01184"></a>01184             alloc.<a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets, sz );
-<a name="l01185"></a>01185         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block && embedded_block != first_block )
-<a name="l01186"></a>01186             alloc.<a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets, segment_size(first_block)-embedded_buckets );
-<a name="l01187"></a>01187         <span class="keywordflow">if</span>( s >= embedded_block ) my_table[s] = 0;
-<a name="l01188"></a>01188     } <span class="keywordflow">while</span>(s-- > 0);
-<a name="l01189"></a>01189     my_mask = embedded_buckets - 1;
-<a name="l01190"></a>01190 }
-<a name="l01191"></a>01191 
-<a name="l01192"></a>01192 <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="l01193"></a><a class="code" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">01193</a> <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>& source ) {
-<a name="l01194"></a>01194     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
-<a name="l01195"></a>01195     hashcode_t mask = source.my_mask;
-<a name="l01196"></a>01196     <span class="keywordflow">if</span>( my_mask == mask ) { <span class="comment">// optimized version</span>
-<a name="l01197"></a>01197         bucket *dst = 0, *src = 0;
-<a name="l01198"></a>01198         <span class="keywordflow">for</span>( hashcode_t k = 0; k <= mask; k++ ) {
-<a name="l01199"></a>01199             <span class="keywordflow">if</span>( k & (k-2) ) ++dst,src++; <span class="comment">// not the beginning of a segment</span>
-<a name="l01200"></a>01200             <span class="keywordflow">else</span> { dst = get_bucket( k ); src = source.get_bucket( k ); }
-<a name="l01201"></a>01201             __TBB_ASSERT( dst->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01202"></a>01202             node *n = static_cast<node*>( src->node_list );
-<a name="l01203"></a>01203             <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// source is not rehashed, items are in previous buckets</span>
-<a name="l01204"></a>01204                 <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, k );
-<a name="l01205"></a>01205                 rehash_bucket( b(), k ); <span class="comment">// TODO: use without synchronization</span>
-<a name="l01206"></a>01206             } <span class="keywordflow">else</span> <span class="keywordflow">for</span>(; n; n = static_cast<node*>( n->next ) ) {
-<a name="l01207"></a>01207                 add_to_bucket( dst, <span class="keyword">new</span>( my_allocator ) node(n->item.first, n->item.second) );
-<a name="l01208"></a>01208                 ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01209"></a>01209             }
-<a name="l01210"></a>01210         }
-<a name="l01211"></a>01211     } <span class="keywordflow">else</span> <a class="code" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>( source.<a class="code" href="a00130.html#dfb7ab010b46fc194673256479c2ea48">begin</a>(), source.<a class="code" href="a00130.html#7e2dd7c8b3d37a93ba551e4de33bb73d">end</a>() );
-<a name="l01212"></a>01212 }
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 <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="l01215"></a>01215 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01216"></a>01216 <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
-<a name="l01217"></a>01217     hashcode_t m = my_mask;
-<a name="l01218"></a>01218     <span class="keywordflow">for</span>(; first != last; ++first) {
-<a name="l01219"></a>01219         hashcode_t h = my_hash_compare.hash( first->first );
-<a name="l01220"></a>01220         bucket *b = get_bucket( h & m );
-<a name="l01221"></a>01221         __TBB_ASSERT( b->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01222"></a>01222         node *n = <span class="keyword">new</span>( my_allocator ) node(first->first, first->second);
-<a name="l01223"></a>01223         add_to_bucket( b, n );
-<a name="l01224"></a>01224         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01225"></a>01225     }
-<a name="l01226"></a>01226 }
-<a name="l01227"></a>01227 
-<a name="l01228"></a>01228 <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>
-<a name="l01229"></a>01229 <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) {
-<a name="l01230"></a>01230     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01231"></a>01231     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
-<a name="l01232"></a>01232     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
-<a name="l01233"></a>01233     <span class="keywordflow">for</span>(; i != i_end; ++i) {
-<a name="l01234"></a>01234         j = b.equal_range(i->first).first;
-<a name="l01235"></a>01235         <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01236"></a>01236     }
-<a name="l01237"></a>01237     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01238"></a>01238 }
-<a name="l01239"></a>01239 
-<a name="l01240"></a>01240 <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>
-<a name="l01241"></a>01241 <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)
-<a name="l01242"></a>01242 {    <span class="keywordflow">return</span> !(a == b); }
-<a name="l01243"></a>01243 
-<a name="l01244"></a>01244 <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="l01245"></a>01245 <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)
-<a name="l01246"></a>01246 {    a.swap( b ); }
-<a name="l01247"></a>01247 
-<a name="l01248"></a>01248 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l01249"></a>01249 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
-<a name="l01250"></a>01250 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
-<a name="l01251"></a>01251 <span class="preprocessor"></span>
-<a name="l01252"></a>01252 } <span class="comment">// namespace tbb</span>
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254 <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/a00266.html b/doc/html/a00274.html
similarity index 77%
copy from doc/html/a00266.html
copy to doc/html/a00274.html
index 761a180..038fe72 100644
--- a/doc/html/a00266.html
+++ b/doc/html/a00274.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>blocked_range.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,45 +49,45 @@
 <a name="l00037"></a>00037 
 <a name="l00038"></a>00038 
 <a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00040"></a><a class="code" href="a00122.html">00040</a> <span class="keyword">class </span><a class="code" href="a00122.html">blocked_range</a> {
+<a name="l00040"></a><a class="code" href="a00127.html">00040</a> <span class="keyword">class </span><a class="code" href="a00127.html">blocked_range</a> {
 <a name="l00041"></a>00041 <span class="keyword">public</span>:
 <a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
+<a name="l00045"></a><a class="code" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
 <a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
+<a name="l00048"></a><a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
 <a name="l00049"></a>00049 
 <a name="l00051"></a>00051 
-<a name="l00052"></a><a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_begin(), my_end() {}
+<a name="l00052"></a><a class="code" href="a00127.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00127.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
 <a name="l00053"></a>00053 
-<a name="l00055"></a><a class="code" href="a00122.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1 ) : 
+<a name="l00055"></a><a class="code" href="a00127.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00127.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1 ) : 
 <a name="l00056"></a>00056         my_end(end_), my_begin(begin_), my_grainsize(grainsize_) 
 <a name="l00057"></a>00057     {
 <a name="l00058"></a>00058         __TBB_ASSERT( my_grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
 <a name="l00059"></a>00059     }
 <a name="l00060"></a>00060 
-<a name="l00062"></a><a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00062"></a><a class="code" href="a00127.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
 <a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00065"></a><a class="code" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
 <a name="l00066"></a>00066 
 <a name="l00068"></a>00068 
-<a name="l00069"></a><a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
-<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()), <span class="stringliteral">"size() unspecified if end()<begin()"</span> );
-<a name="l00071"></a>00071         <span class="keywordflow">return</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>(my_end-my_begin);
+<a name="l00069"></a><a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
+<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin</a>()), <span class="stringliteral">"size() unspecified if end()<begin()"</span> );
+<a name="l00071"></a>00071         <span class="keywordflow">return</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>(my_end-my_begin);
 <a name="l00072"></a>00072     }
 <a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00075"></a><a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
 <a name="l00076"></a>00076 
 <a name="l00077"></a>00077     <span class="comment">//------------------------------------------------------------------------</span>
 <a name="l00078"></a>00078     <span class="comment">// Methods that implement Range concept</span>
 <a name="l00079"></a>00079     <span class="comment">//------------------------------------------------------------------------</span>
 <a name="l00080"></a>00080 
-<a name="l00082"></a><a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin<my_end);}
+<a name="l00082"></a><a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin<my_end);}
 <a name="l00083"></a>00083 
 <a name="l00085"></a>00085 
-<a name="l00086"></a><a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
+<a name="l00086"></a><a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
 <a name="l00087"></a>00087 
 <a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00122.html">blocked_range</a>& r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00091"></a><a class="code" href="a00127.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00127.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00127.html">blocked_range</a>& r, <a class="code" href="a00173.html">split</a> ) : 
 <a name="l00092"></a>00092         my_end(r.my_end),
 <a name="l00093"></a>00093         my_begin(do_split(r)),
 <a name="l00094"></a>00094         my_grainsize(r.my_grainsize)
@@ -96,13 +96,13 @@
 <a name="l00097"></a>00097 <span class="keyword">private</span>:
 <a name="l00099"></a>00099     Value my_end;
 <a name="l00100"></a>00100     Value my_begin;
-<a name="l00101"></a>00101     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> my_grainsize;
+<a name="l00101"></a>00101     <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> my_grainsize;
 <a name="l00102"></a>00102 
 <a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <span class="keyword">static</span> Value do_split( <a class="code" href="a00122.html">blocked_range</a>& r ) {
-<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
-<a name="l00107"></a>00107         Value middle = r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
-<a name="l00108"></a>00108         r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a> = middle;
+<a name="l00105"></a>00105     <span class="keyword">static</span> Value do_split( <a class="code" href="a00127.html">blocked_range</a>& r ) {
+<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
+<a name="l00107"></a>00107         Value middle = r.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00127.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
+<a name="l00108"></a>00108         r.<a class="code" href="a00127.html#1ec95c8988b50064dd603998b16f3930">my_end</a> = middle;
 <a name="l00109"></a>00109         <span class="keywordflow">return</span> middle;
 <a name="l00110"></a>00110     }
 <a name="l00111"></a>00111 
diff --git a/doc/html/a00267.html b/doc/html/a00275.html
similarity index 76%
rename from doc/html/a00267.html
rename to doc/html/a00275.html
index 95121be..f748339 100644
--- a/doc/html/a00267.html
+++ b/doc/html/a00275.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>blocked_range2d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,54 +49,54 @@
 <a name="l00028"></a>00028 
 <a name="l00030"></a>00030 
 <a name="l00031"></a>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="a00123.html">00032</a> <span class="keyword">class </span><a class="code" href="a00123.html">blocked_range2d</a> {
+<a name="l00032"></a><a class="code" href="a00128.html">00032</a> <span class="keyword">class </span><a class="code" href="a00128.html">blocked_range2d</a> {
 <a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range<RowValue></a> <a class="code" href="a00122.html">row_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range<ColValue></a> <a class="code" href="a00122.html">col_range_type</a>;
+<a name="l00035"></a><a class="code" href="a00128.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00127.html">blocked_range<RowValue></a> <a class="code" href="a00127.html">row_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00127.html">blocked_range<ColValue></a> <a class="code" href="a00127.html">col_range_type</a>;
 <a name="l00037"></a>00037  
 <a name="l00038"></a>00038 <span class="keyword">private</span>:
-<a name="l00039"></a>00039     <a class="code" href="a00122.html">row_range_type</a> my_rows;
-<a name="l00040"></a>00040     <a class="code" href="a00122.html">col_range_type</a> my_cols;
+<a name="l00039"></a>00039     <a class="code" href="a00127.html">row_range_type</a> my_rows;
+<a name="l00040"></a>00040     <a class="code" href="a00127.html">col_range_type</a> my_cols;
 <a name="l00041"></a>00041 
 <a name="l00042"></a>00042 <span class="keyword">public</span>:
 <a name="l00043"></a>00043 
-<a name="l00044"></a>00044     <a class="code" href="a00123.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
-<a name="l00045"></a>00045                      ColValue col_begin, ColValue col_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) : 
+<a name="l00044"></a>00044     <a class="code" href="a00128.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
+<a name="l00045"></a>00045                      ColValue col_begin, ColValue col_end, <span class="keyword">typename</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) : 
 <a name="l00046"></a>00046         my_rows(row_begin,row_end,row_grainsize),
 <a name="l00047"></a>00047         my_cols(col_begin,col_end,col_grainsize)
 <a name="l00048"></a>00048     {
 <a name="l00049"></a>00049     }
 <a name="l00050"></a>00050 
-<a name="l00051"></a>00051     <a class="code" href="a00123.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end,
+<a name="l00051"></a>00051     <a class="code" href="a00128.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end,
 <a name="l00052"></a>00052                      ColValue col_begin, ColValue col_end ) : 
 <a name="l00053"></a>00053         my_rows(row_begin,row_end),
 <a name="l00054"></a>00054         my_cols(col_begin,col_end)
 <a name="l00055"></a>00055     {
 <a name="l00056"></a>00056     }
 <a name="l00057"></a>00057 
-<a name="l00059"></a><a class="code" href="a00123.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00123.html#d144cb2d88cef553420311aca8667a44">empty</a>()<span class="keyword"> const </span>{
+<a name="l00059"></a><a class="code" href="a00128.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00128.html#d144cb2d88cef553420311aca8667a44">empty</a>()<span class="keyword"> const </span>{
 <a name="l00060"></a>00060         <span class="comment">// Yes, it is a logical OR here, not AND.</span>
-<a name="l00061"></a>00061         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00061"></a>00061         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
 <a name="l00062"></a>00062     }
 <a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>()<span class="keyword"> const </span>{
-<a name="l00066"></a>00066         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00065"></a><a class="code" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>()<span class="keyword"> const </span>{
+<a name="l00066"></a>00066         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
 <a name="l00067"></a>00067     }
 <a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <a class="code" href="a00123.html">blocked_range2d</a>( <a class="code" href="a00123.html">blocked_range2d</a>& r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00069"></a>00069     <a class="code" href="a00128.html">blocked_range2d</a>( <a class="code" href="a00128.html">blocked_range2d</a>& r, <a class="code" href="a00173.html">split</a> ) : 
 <a name="l00070"></a>00070         my_rows(r.my_rows),
 <a name="l00071"></a>00071         my_cols(r.my_cols)
 <a name="l00072"></a>00072     {
-<a name="l00073"></a>00073         <span class="keywordflow">if</span>( my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00074"></a>00074             my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00123.html#9837bbaabc5836741fde79512ea1131d">my_cols</a>);
+<a name="l00073"></a>00073         <span class="keywordflow">if</span>( my_rows.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00074"></a>00074             my_cols.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00128.html#9837bbaabc5836741fde79512ea1131d">my_cols</a>);
 <a name="l00075"></a>00075         } <span class="keywordflow">else</span> {
-<a name="l00076"></a>00076             my_rows.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00123.html#4be7c7b39da256afe9c67be735b6f788">my_rows</a>);
+<a name="l00076"></a>00076             my_rows.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00128.html#4be7c7b39da256afe9c67be735b6f788">my_rows</a>);
 <a name="l00077"></a>00077         }
 <a name="l00078"></a>00078     }
 <a name="l00079"></a>00079 
-<a name="l00081"></a><a class="code" href="a00123.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">row_range_type</a>& <a class="code" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00081"></a><a class="code" href="a00128.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00127.html">row_range_type</a>& <a class="code" href="a00128.html#f496e7348a82652fba581203477cc07c">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
 <a name="l00082"></a>00082 
-<a name="l00084"></a><a class="code" href="a00123.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">col_range_type</a>& <a class="code" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00084"></a><a class="code" href="a00128.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00127.html">col_range_type</a>& <a class="code" href="a00128.html#392a46759af2c884957115771affa7f4">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
 <a name="l00085"></a>00085 };
 <a name="l00086"></a>00086 
 <a name="l00087"></a>00087 } <span class="comment">// namespace tbb </span>
diff --git a/doc/html/a00268.html b/doc/html/a00276.html
similarity index 71%
rename from doc/html/a00268.html
rename to doc/html/a00276.html
index 53dd7e7..e92f908 100644
--- a/doc/html/a00268.html
+++ b/doc/html/a00276.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>blocked_range3d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,20 +49,20 @@
 <a name="l00028"></a>00028 
 <a name="l00030"></a>00030 
 <a name="l00031"></a>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="a00124.html">00032</a> <span class="keyword">class </span><a class="code" href="a00124.html">blocked_range3d</a> {
+<a name="l00032"></a><a class="code" href="a00129.html">00032</a> <span class="keyword">class </span><a class="code" href="a00129.html">blocked_range3d</a> {
 <a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range<PageValue></a> <a class="code" href="a00122.html">page_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range<RowValue></a>  <a class="code" href="a00122.html">row_range_type</a>;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range<ColValue></a>  <a class="code" href="a00122.html">col_range_type</a>;
+<a name="l00035"></a><a class="code" href="a00129.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00127.html">blocked_range<PageValue></a> <a class="code" href="a00127.html">page_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00127.html">blocked_range<RowValue></a>  <a class="code" href="a00127.html">row_range_type</a>;
+<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00127.html">blocked_range<ColValue></a>  <a class="code" href="a00127.html">col_range_type</a>;
 <a name="l00038"></a>00038  
 <a name="l00039"></a>00039 <span class="keyword">private</span>:
-<a name="l00040"></a>00040     <a class="code" href="a00122.html">page_range_type</a> my_pages;
-<a name="l00041"></a>00041     <a class="code" href="a00122.html">row_range_type</a>  my_rows;
-<a name="l00042"></a>00042     <a class="code" href="a00122.html">col_range_type</a>  my_cols;
+<a name="l00040"></a>00040     <a class="code" href="a00127.html">page_range_type</a> my_pages;
+<a name="l00041"></a>00041     <a class="code" href="a00127.html">row_range_type</a>  my_rows;
+<a name="l00042"></a>00042     <a class="code" href="a00127.html">col_range_type</a>  my_cols;
 <a name="l00043"></a>00043 
 <a name="l00044"></a>00044 <span class="keyword">public</span>:
 <a name="l00045"></a>00045 
-<a name="l00046"></a>00046     <a class="code" href="a00124.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end,
+<a name="l00046"></a>00046     <a class="code" href="a00129.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end,
 <a name="l00047"></a>00047                      RowValue  row_begin,  RowValue row_end,
 <a name="l00048"></a>00048                      ColValue  col_begin,  ColValue col_end ) : 
 <a name="l00049"></a>00049         my_pages(page_begin,page_end),
@@ -71,49 +71,49 @@
 <a name="l00052"></a>00052     {
 <a name="l00053"></a>00053     }
 <a name="l00054"></a>00054 
-<a name="l00055"></a>00055     <a class="code" href="a00124.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, 
-<a name="l00056"></a>00056                      RowValue  row_begin,  RowValue row_end,   <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
-<a name="l00057"></a>00057                      ColValue  col_begin,  ColValue col_end,   <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) :  
+<a name="l00055"></a>00055     <a class="code" href="a00129.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, 
+<a name="l00056"></a>00056                      RowValue  row_begin,  RowValue row_end,   <span class="keyword">typename</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
+<a name="l00057"></a>00057                      ColValue  col_begin,  ColValue col_end,   <span class="keyword">typename</span> <a class="code" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) :  
 <a name="l00058"></a>00058         my_pages(page_begin,page_end,page_grainsize),
 <a name="l00059"></a>00059         my_rows(row_begin,row_end,row_grainsize),
 <a name="l00060"></a>00060         my_cols(col_begin,col_end,col_grainsize)
 <a name="l00061"></a>00061     {
 <a name="l00062"></a>00062     }
 <a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00124.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a>()<span class="keyword"> const </span>{
+<a name="l00065"></a><a class="code" href="a00129.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#356860e1c977d91711e8216bd55c0b25">empty</a>()<span class="keyword"> const </span>{
 <a name="l00066"></a>00066         <span class="comment">// Yes, it is a logical OR here, not AND.</span>
-<a name="l00067"></a>00067         <span class="keywordflow">return</span> my_pages.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00067"></a>00067         <span class="keywordflow">return</span> my_pages.<a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00127.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
 <a name="l00068"></a>00068     }
 <a name="l00069"></a>00069 
-<a name="l00071"></a><a class="code" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>()<span class="keyword"> const </span>{
-<a name="l00072"></a>00072         <span class="keywordflow">return</span>  my_pages.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00071"></a><a class="code" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>()<span class="keyword"> const </span>{
+<a name="l00072"></a>00072         <span class="keywordflow">return</span>  my_pages.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00127.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
 <a name="l00073"></a>00073     }
 <a name="l00074"></a>00074 
-<a name="l00075"></a>00075     <a class="code" href="a00124.html">blocked_range3d</a>( <a class="code" href="a00124.html">blocked_range3d</a>& r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00075"></a>00075     <a class="code" href="a00129.html">blocked_range3d</a>( <a class="code" href="a00129.html">blocked_range3d</a>& r, <a class="code" href="a00173.html">split</a> ) : 
 <a name="l00076"></a>00076         my_pages(r.my_pages),
 <a name="l00077"></a>00077         my_rows(r.my_rows),
 <a name="l00078"></a>00078         my_cols(r.my_cols)
 <a name="l00079"></a>00079     {
-<a name="l00080"></a>00080         <span class="keywordflow">if</span>( my_pages.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00124.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
+<a name="l00080"></a>00080         <span class="keywordflow">if</span>( my_pages.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00129.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
 <a name="l00083"></a>00083             } <span class="keywordflow">else</span> {
-<a name="l00084"></a>00084                 my_rows.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00124.html#76ead25c280ef630b88a1c8846471707">my_rows</a>);
+<a name="l00084"></a>00084                 my_rows.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00129.html#76ead25c280ef630b88a1c8846471707">my_rows</a>);
 <a name="l00085"></a>00085             }
 <a name="l00086"></a>00086         } <span class="keywordflow">else</span> {
-<a name="l00087"></a>00087             <span class="keywordflow">if</span> ( my_pages.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00124.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
+<a name="l00087"></a>00087             <span class="keywordflow">if</span> ( my_pages.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00127.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00129.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
 <a name="l00089"></a>00089             } <span class="keywordflow">else</span> {
-<a name="l00090"></a>00090                     my_pages.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00124.html#b18ae46a01d42745078d9e287ab87baa">my_pages</a>);
+<a name="l00090"></a>00090                     my_pages.<a class="code" href="a00127.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00129.html#b18ae46a01d42745078d9e287ab87baa">my_pages</a>);
 <a name="l00091"></a>00091             }
 <a name="l00092"></a>00092         }
 <a name="l00093"></a>00093     }
 <a name="l00094"></a>00094 
-<a name="l00096"></a><a class="code" href="a00124.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">page_range_type</a>& <a class="code" href="a00124.html#cf971430aa12361d3ed245344b7c6764">pages</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_pages;}
+<a name="l00096"></a><a class="code" href="a00129.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00127.html">page_range_type</a>& <a class="code" href="a00129.html#cf971430aa12361d3ed245344b7c6764">pages</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_pages;}
 <a name="l00097"></a>00097 
-<a name="l00099"></a><a class="code" href="a00124.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">row_range_type</a>& <a class="code" href="a00124.html#1584623e59ff32a8aa82006827508be4">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00099"></a><a class="code" href="a00129.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00127.html">row_range_type</a>& <a class="code" href="a00129.html#1584623e59ff32a8aa82006827508be4">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
 <a name="l00100"></a>00100 
-<a name="l00102"></a><a class="code" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">col_range_type</a>& <a class="code" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00102"></a><a class="code" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00127.html">col_range_type</a>& <a class="code" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
 <a name="l00103"></a>00103 
 <a name="l00104"></a>00104 };
 <a name="l00105"></a>00105 
diff --git a/doc/html/a00269.html b/doc/html/a00277.html
similarity index 86%
rename from doc/html/a00269.html
rename to doc/html/a00277.html
index 52ec4cc..b288d44 100644
--- a/doc/html/a00269.html
+++ b/doc/html/a00277.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>cache_aligned_allocator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -66,7 +66,7 @@
 <a name="l00051"></a>00051 <span class="preprocessor"></span>
 <a name="l00053"></a>00053 
 <a name="l00056"></a>00056 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00057"></a><a class="code" href="a00125.html">00057</a> <span class="keyword">class </span><a class="code" href="a00125.html">cache_aligned_allocator</a> {
+<a name="l00057"></a><a class="code" href="a00130.html">00057</a> <span class="keyword">class </span><a class="code" href="a00130.html">cache_aligned_allocator</a> {
 <a name="l00058"></a>00058 <span class="keyword">public</span>:
 <a name="l00059"></a>00059     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
 <a name="l00060"></a>00060     <span class="keyword">typedef</span> value_type* pointer;
@@ -76,32 +76,32 @@
 <a name="l00064"></a>00064     <span class="keyword">typedef</span> size_t size_type;
 <a name="l00065"></a>00065     <span class="keyword">typedef</span> ptrdiff_t difference_type;
 <a name="l00066"></a>00066     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00067"></a>00067         <span class="keyword">typedef</span> <a class="code" href="a00125.html">cache_aligned_allocator<U></a> other;
+<a name="l00067"></a>00067         <span class="keyword">typedef</span> <a class="code" href="a00130.html">cache_aligned_allocator<U></a> other;
 <a name="l00068"></a>00068     };
 <a name="l00069"></a>00069 
-<a name="l00070"></a>00070     <a class="code" href="a00125.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00071"></a>00071     <a class="code" href="a00125.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-<a name="l00072"></a>00072     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00125.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+<a name="l00070"></a>00070     <a class="code" href="a00130.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00071"></a>00071     <a class="code" href="a00130.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00130.html">cache_aligned_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+<a name="l00072"></a>00072     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00130.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00130.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
 <a name="l00073"></a>00073 
 <a name="l00074"></a>00074     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00075"></a>00075     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00076"></a>00076     
-<a name="l00078"></a><a class="code" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
+<a name="l00078"></a><a class="code" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
 <a name="l00079"></a>00079         <span class="comment">// The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt</span>
 <a name="l00080"></a>00080         <span class="keywordflow">return</span> pointer(internal::NFS_Allocate( n, <span class="keyword">sizeof</span>(value_type), const_cast<void*>(hint) ));
 <a name="l00081"></a>00081     }
 <a name="l00082"></a>00082 
-<a name="l00084"></a><a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( pointer p, size_type ) {
+<a name="l00084"></a><a class="code" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( pointer p, size_type ) {
 <a name="l00085"></a>00085         internal::NFS_Free(p);
 <a name="l00086"></a>00086     }
 <a name="l00087"></a>00087 
-<a name="l00089"></a><a class="code" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const throw() {
+<a name="l00089"></a><a class="code" href="a00130.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00130.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const throw() {
 <a name="l00090"></a>00090         <span class="keywordflow">return</span> (~size_t(0)-internal::NFS_MaxLineSize)/<span class="keyword">sizeof</span>(value_type);
 <a name="l00091"></a>00091     }
 <a name="l00092"></a>00092 
-<a name="l00094"></a><a class="code" href="a00125.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) value_type(value);}
+<a name="l00094"></a><a class="code" href="a00130.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00130.html#958ee8745c86c275bfc9533af565e017">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
 <a name="l00095"></a>00095 
-<a name="l00097"></a><a class="code" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>( pointer p ) {p->~value_type();}
+<a name="l00097"></a><a class="code" href="a00130.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00130.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>( pointer p ) {p->~value_type();}
 <a name="l00098"></a>00098 };
 <a name="l00099"></a>00099 
 <a name="l00100"></a>00100 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
@@ -110,18 +110,18 @@
 <a name="l00103"></a>00103 <span class="preprocessor"></span>
 <a name="l00105"></a>00105 
 <a name="l00106"></a>00106 <span class="keyword">template</span><> 
-<a name="l00107"></a><a class="code" href="a00126.html">00107</a> <span class="keyword">class </span><a class="code" href="a00125.html">cache_aligned_allocator</a><void> {
+<a name="l00107"></a><a class="code" href="a00131.html">00107</a> <span class="keyword">class </span><a class="code" href="a00130.html">cache_aligned_allocator</a><void> {
 <a name="l00108"></a>00108 <span class="keyword">public</span>:
 <a name="l00109"></a>00109     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
 <a name="l00110"></a>00110     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
 <a name="l00111"></a>00111     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
 <a name="l00112"></a>00112     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00113"></a>00113         <span class="keyword">typedef</span> <a class="code" href="a00125.html">cache_aligned_allocator<U></a> other;
+<a name="l00113"></a>00113         <span class="keyword">typedef</span> <a class="code" href="a00130.html">cache_aligned_allocator<U></a> other;
 <a name="l00114"></a>00114     };
 <a name="l00115"></a>00115 };
 <a name="l00116"></a>00116 
 <a name="l00117"></a>00117 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00118"></a>00118 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00118"></a>00118 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00130.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00130.html">cache_aligned_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
 <a name="l00119"></a>00119 
 <a name="l00120"></a>00120 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
 <a name="l00121"></a>00121 <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>;}
diff --git a/doc/html/a00271.html b/doc/html/a00279.html
similarity index 85%
rename from doc/html/a00271.html
rename to doc/html/a00279.html
index 4889a96..2ce886a 100644
--- a/doc/html/a00271.html
+++ b/doc/html/a00279.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>combinable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,38 +49,38 @@
 <a name="l00031"></a>00031 
 <a name="l00032"></a>00032 
 <a name="l00033"></a>00033     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00034"></a><a class="code" href="a00128.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00128.html">combinable</a> {
+<a name="l00034"></a><a class="code" href="a00133.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00133.html">combinable</a> {
 <a name="l00035"></a>00035     <span class="keyword">private</span>:
-<a name="l00036"></a>00036         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00125.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00125.html">my_alloc</a>;
+<a name="l00036"></a>00036         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00130.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00130.html">my_alloc</a>;
 <a name="l00037"></a>00037 
-<a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific<T, my_alloc, ets_no_key></a> <a class="code" href="a00138.html">my_ets_type</a>;
-<a name="l00039"></a>00039         <a class="code" href="a00138.html">my_ets_type</a> my_ets; 
+<a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00143.html">tbb::enumerable_thread_specific<T, my_alloc, ets_no_key></a> <a class="code" href="a00143.html">my_ets_type</a>;
+<a name="l00039"></a>00039         <a class="code" href="a00143.html">my_ets_type</a> my_ets; 
 <a name="l00040"></a>00040  
 <a name="l00041"></a>00041     <span class="keyword">public</span>:
 <a name="l00042"></a>00042 
-<a name="l00043"></a>00043         <a class="code" href="a00128.html">combinable</a>() { }
+<a name="l00043"></a>00043         <a class="code" href="a00133.html">combinable</a>() { }
 <a name="l00044"></a>00044 
 <a name="l00045"></a>00045         <span class="keyword">template</span> <<span class="keyword">typename</span> finit>
-<a name="l00046"></a>00046         <a class="code" href="a00128.html">combinable</a>( finit _finit) : my_ets(_finit) { }
+<a name="l00046"></a>00046         <a class="code" href="a00133.html">combinable</a>( finit _finit) : my_ets(_finit) { }
 <a name="l00047"></a>00047 
-<a name="l00049"></a><a class="code" href="a00128.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
+<a name="l00049"></a><a class="code" href="a00133.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00133.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
 <a name="l00050"></a>00050         }
 <a name="l00051"></a>00051 
-<a name="l00052"></a>00052         <a class="code" href="a00128.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00128.html">combinable</a>& other) : my_ets(other.my_ets) { }
+<a name="l00052"></a>00052         <a class="code" href="a00133.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00133.html">combinable</a>& other) : my_ets(other.my_ets) { }
 <a name="l00053"></a>00053 
 <a name="l00054"></a>00054         combinable & operator=( <span class="keyword">const</span> combinable & other) { my_ets = other.my_ets; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
 <a name="l00055"></a>00055 
-<a name="l00056"></a>00056         <span class="keywordtype">void</span> clear() { my_ets.<a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); }
+<a name="l00056"></a>00056         <span class="keywordtype">void</span> clear() { my_ets.<a class="code" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); }
 <a name="l00057"></a>00057 
-<a name="l00058"></a>00058         T& local() { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(); }
+<a name="l00058"></a>00058         T& local() { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>(); }
 <a name="l00059"></a>00059 
-<a name="l00060"></a>00060         T& local(<span class="keywordtype">bool</span> & exists) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(exists); }
+<a name="l00060"></a>00060         T& local(<span class="keywordtype">bool</span> & exists) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>(exists); }
 <a name="l00061"></a>00061 
 <a name="l00062"></a>00062         <span class="keyword">template</span>< <span class="keyword">typename</span> FCombine>
-<a name="l00063"></a>00063         T combine(FCombine fcombine) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#dd6b27d9c98297220b08732d9087a5a8">combine</a>(fcombine); }
+<a name="l00063"></a>00063         T combine(FCombine fcombine) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00143.html#dd6b27d9c98297220b08732d9087a5a8">combine</a>(fcombine); }
 <a name="l00064"></a>00064 
 <a name="l00065"></a>00065         <span class="keyword">template</span><<span class="keyword">typename</span> FCombine>
-<a name="l00066"></a>00066         <span class="keywordtype">void</span> combine_each(FCombine fcombine) { my_ets.<a class="code" href="a00138.html#4abce9638ef2693d813d820af59bb6e2">combine_each</a>(fcombine); }
+<a name="l00066"></a>00066         <span class="keywordtype">void</span> combine_each(FCombine fcombine) { my_ets.<a class="code" href="a00143.html#4abce9638ef2693d813d820af59bb6e2">combine_each</a>(fcombine); }
 <a name="l00067"></a>00067 
 <a name="l00068"></a>00068     };
 <a name="l00069"></a>00069 } <span class="comment">// namespace tbb</span>
diff --git a/doc/html/a00280.html b/doc/html/a00280.html
new file mode 100644
index 0000000..ffa0b98
--- /dev/null
+++ b/doc/html/a00280.html
@@ -0,0 +1,1265 @@
+<!DOCTYPE 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">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdexcept></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include <iterator></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <string></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">namespace </span>tbb {
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043 <span class="keyword">namespace </span>internal {
+<a name="l00045"></a>00045     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00047"></a>00047     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
+<a name="l00049"></a>00049     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00050"></a>00050 }
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
+<a name="l00054"></a>00054 <span class="keyword">struct </span>tbb_hash_compare {
+<a name="l00055"></a>00055     <span class="keyword">static</span> size_t hash( <span class="keyword">const</span> Key& a ) { <span class="keywordflow">return</span> <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>(a); }
+<a name="l00056"></a>00056     <span class="keyword">static</span> <span class="keywordtype">bool</span> equal( <span class="keyword">const</span> Key& a, <span class="keyword">const</span> Key& b ) { <span class="keywordflow">return</span> a == b; }
+<a name="l00057"></a>00057 };
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">namespace </span>interface4 {
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061     <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> > >
+<a name="l00062"></a>00062     <span class="keyword">class </span>concurrent_hash_map;
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064     <span class="keyword">namespace </span>internal {
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 
+<a name="l00068"></a>00068     <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00070"></a>00070     <span class="keyword">struct </span>hash_map_node_base : tbb::internal::no_copy {
+<a name="l00072"></a>00072         <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
+<a name="l00074"></a>00074         <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
+<a name="l00076"></a>00076         hash_map_node_base *next;
+<a name="l00077"></a>00077         mutex_t mutex;
+<a name="l00078"></a>00078     };
+<a name="l00080"></a>00080     <span class="keyword">static</span> hash_map_node_base *<span class="keyword">const</span> rehash_req = reinterpret_cast<hash_map_node_base*>(size_t(3));
+<a name="l00082"></a>00082     <span class="keyword">static</span> hash_map_node_base *<span class="keyword">const</span> empty_rehashed = reinterpret_cast<hash_map_node_base*>(size_t(0));
+<a name="l00084"></a>00084     <span class="keyword">class </span>hash_map_base {
+<a name="l00085"></a>00085     <span class="keyword">public</span>:
+<a name="l00087"></a>00087         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00089"></a>00089         <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00091"></a>00091         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00093"></a>00093         <span class="keyword">typedef</span> hash_map_node_base node_base;
+<a name="l00095"></a>00095         <span class="keyword">struct </span>bucket : tbb::internal::no_copy {
+<a name="l00097"></a>00097             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
+<a name="l00099"></a>00099             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
+<a name="l00100"></a>00100             mutex_t mutex;
+<a name="l00101"></a>00101             node_base *node_list;
+<a name="l00102"></a>00102         };
+<a name="l00104"></a>00104         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
+<a name="l00106"></a>00106         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1<<embedded_block;
+<a name="l00108"></a>00108         <span class="keyword">static</span> size_type <span class="keyword">const</span> first_block = 8; <span class="comment">//including embedded_block. perfect with bucket size 16, so the allocations are power of 4096</span>
+<a name="l00110"></a>00110 <span class="comment"></span>        <span class="keyword">static</span> size_type <span class="keyword">const</span> pointers_per_table = <span class="keyword">sizeof</span>(segment_index_t) * 8; <span class="comment">// one segment per bit</span>
+<a name="l00112"></a>00112 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
+<a name="l00114"></a>00114         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
+<a name="l00116"></a>00116         atomic<hashcode_t> my_mask;
+<a name="l00118"></a>00118         segments_table_t my_table;
+<a name="l00120"></a>00120         atomic<size_type> my_size; <span class="comment">// It must be in separate cache line from my_mask due to performance effects</span>
+<a name="l00122"></a>00122 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
+<a name="l00123"></a>00123 
+<a name="l00125"></a>00125         hash_map_base() {
+<a name="l00126"></a>00126             std::memset( <span class="keyword">this</span>, 0, pointers_per_table*<span class="keyword">sizeof</span>(segment_ptr_t) <span class="comment">// 32*4=128   or 64*8=512</span>
+<a name="l00127"></a>00127                 + <span class="keyword">sizeof</span>(my_size) + <span class="keyword">sizeof</span>(my_mask)  <span class="comment">// 4+4 or 8+8</span>
+<a name="l00128"></a>00128                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
+<a name="l00129"></a>00129             <span class="keywordflow">for</span>( size_type i = 0; i < embedded_block; i++ ) <span class="comment">// fill the table</span>
+<a name="l00130"></a>00130                 my_table[i] = my_embedded_segment + segment_base(i);
+<a name="l00131"></a>00131             my_mask = embedded_buckets - 1;
+<a name="l00132"></a>00132             __TBB_ASSERT( embedded_block <= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134 
+<a name="l00136"></a>00136         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00137"></a>00137             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00138"></a>00138         }
+<a name="l00139"></a>00139 
+<a name="l00141"></a>00141         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00142"></a>00142             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
+<a name="l00143"></a>00143         }
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00147"></a>00147             <span class="keywordflow">return</span> size_type(1)<<k; <span class="comment">// fake value for k==0</span>
+<a name="l00148"></a>00148         }
+<a name="l00149"></a>00149         
+<a name="l00151"></a>00151         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
+<a name="l00152"></a>00152             <span class="keywordflow">return</span> reinterpret_cast<size_t>(ptr) > size_t(63);
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156         <span class="keyword">static</span> <span class="keywordtype">void</span> init_buckets( segment_ptr_t ptr, size_type sz, <span class="keywordtype">bool</span> is_initial ) {
+<a name="l00157"></a>00157             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
+<a name="l00158"></a>00158             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i < sz; i++, ptr++) {
+<a name="l00159"></a>00159                     *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
+<a name="l00160"></a>00160                     ptr->node_list = rehash_req;
+<a name="l00161"></a>00161                 }
+<a name="l00162"></a>00162         }
+<a name="l00163"></a>00163         
+<a name="l00165"></a>00165         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
+<a name="l00166"></a>00166             __TBB_ASSERT(b->node_list != rehash_req, NULL);
+<a name="l00167"></a>00167             n->next = b->node_list;
+<a name="l00168"></a>00168             b->node_list = n; <span class="comment">// its under lock and flag is set</span>
+<a name="l00169"></a>00169         }
+<a name="l00170"></a>00170 
+<a name="l00172"></a>00172         <span class="keyword">struct </span>enable_segment_failsafe {
+<a name="l00173"></a>00173             segment_ptr_t *my_segment_ptr;
+<a name="l00174"></a>00174             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
+<a name="l00175"></a>00175             ~enable_segment_failsafe() {
+<a name="l00176"></a>00176                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
+<a name="l00177"></a>00177             }
+<a name="l00178"></a>00178         };
+<a name="l00179"></a>00179 
+<a name="l00181"></a>00181         <span class="keywordtype">void</span> enable_segment( segment_index_t k, <span class="keywordtype">bool</span> is_initial = <span class="keyword">false</span> ) {
+<a name="l00182"></a>00182             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
+<a name="l00183"></a>00183             enable_segment_failsafe watchdog( my_table, k );
+<a name="l00184"></a>00184             cache_aligned_allocator<bucket> alloc;
+<a name="l00185"></a>00185             size_type sz;
+<a name="l00186"></a>00186             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
+<a name="l00187"></a>00187             <span class="keywordflow">if</span>( k >= first_block ) {
+<a name="l00188"></a>00188                 sz = segment_size( k );
+<a name="l00189"></a>00189                 segment_ptr_t ptr = alloc.allocate( sz );
+<a name="l00190"></a>00190                 init_buckets( ptr, sz, is_initial );
+<a name="l00191"></a>00191 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>                <span class="comment">// TODO: actually, fence and notification are unnecessary here and below</span>
+<a name="l00193"></a>00193                 itt_store_pointer_with_release_v3( my_table + k, ptr );
+<a name="l00194"></a>00194 <span class="preprocessor">#else</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>                my_table[k] = ptr;<span class="comment">// my_mask has release fence</span>
+<a name="l00196"></a>00196 <span class="preprocessor">#endif</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>                sz <<= 1;<span class="comment">// double it to get entire capacity of the container</span>
+<a name="l00198"></a>00198             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
+<a name="l00199"></a>00199                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
+<a name="l00200"></a>00200                 sz = segment_size( first_block );
+<a name="l00201"></a>00201                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
+<a name="l00202"></a>00202                 init_buckets( ptr, sz - embedded_buckets, is_initial );
+<a name="l00203"></a>00203                 ptr -= segment_base(embedded_block);
+<a name="l00204"></a>00204                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i < first_block; i++) <span class="comment">// calc the offsets</span>
+<a name="l00205"></a>00205 #<span class="keywordflow">if</span> TBB_USE_THREADING_TOOLS
+<a name="l00206"></a>00206                     itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
+<a name="l00207"></a>00207 <span class="preprocessor">#else</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span>                    my_table[i] = ptr + segment_base(i);
+<a name="l00209"></a>00209 <span class="preprocessor">#endif</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span>            }
+<a name="l00211"></a>00211 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span>            itt_store_pointer_with_release_v3( &my_mask, (<span class="keywordtype">void</span>*)(sz-1) );
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span>            my_mask = sz - 1;
+<a name="l00215"></a>00215 <span class="preprocessor">#endif</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>            watchdog.my_segment_ptr = 0;
+<a name="l00217"></a>00217         }
+<a name="l00218"></a>00218 
+<a name="l00220"></a>00220         bucket *get_bucket( hashcode_t h ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="comment">// TODO: add throw() everywhere?</span>
+<a name="l00221"></a>00221             segment_index_t s = segment_index_of( h );
+<a name="l00222"></a>00222             h -= segment_base(s);
+<a name="l00223"></a>00223             segment_ptr_t seg = my_table[s];
+<a name="l00224"></a>00224             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
+<a name="l00225"></a>00225             <span class="keywordflow">return</span> &seg[h];
+<a name="l00226"></a>00226         }
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228         <span class="comment">// internal serial rehashing helper</span>
+<a name="l00229"></a>00229         <span class="keywordtype">void</span> mark_rehashed_levels( hashcode_t h ) <span class="keywordflow">throw</span> () {
+<a name="l00230"></a>00230             segment_index_t s = segment_index_of( h );
+<a name="l00231"></a>00231             <span class="keywordflow">while</span>( segment_ptr_t seg = my_table[++s] )
+<a name="l00232"></a>00232                 <span class="keywordflow">if</span>( seg[h].node_list == rehash_req ) {
+<a name="l00233"></a>00233                     seg[h].node_list = empty_rehashed;
+<a name="l00234"></a>00234                     mark_rehashed_levels( h + segment_base(s) );
+<a name="l00235"></a>00235                 }
+<a name="l00236"></a>00236         }
+<a name="l00237"></a>00237 
+<a name="l00239"></a>00239         <span class="comment">// Splitting into two functions should help inlining</span>
+<a name="l00240"></a>00240         <span class="keyword">inline</span> <span class="keywordtype">bool</span> check_mask_race( <span class="keyword">const</span> hashcode_t h, hashcode_t &m )<span class="keyword"> const </span>{
+<a name="l00241"></a>00241             hashcode_t m_now, m_old = m;
+<a name="l00242"></a>00242 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span>            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l00244"></a>00244 <span class="preprocessor">#else</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span>            m_now = my_mask;
+<a name="l00246"></a>00246 <span class="preprocessor">#endif</span>
+<a name="l00247"></a>00247 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( m_old != m_now )
+<a name="l00248"></a>00248                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
+<a name="l00249"></a>00249             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00250"></a>00250         }
+<a name="l00251"></a>00251 
+<a name="l00253"></a>00253         <span class="keywordtype">bool</span> check_rehashing_collision( <span class="keyword">const</span> hashcode_t h, hashcode_t m_old, hashcode_t m )<span class="keyword"> const </span>{
+<a name="l00254"></a>00254             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&m</span>
+<a name="l00255"></a>00255             <span class="keywordflow">if</span>( (h & m_old) != (h & m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
+<a name="l00256"></a>00256                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
+<a name="l00257"></a>00257                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
+<a name="l00258"></a>00258                 <span class="keywordflow">for</span>( ++m_old; !(h & m_old); m_old <<= 1 ); <span class="comment">// at maximum few rounds depending on the first block size</span>
+<a name="l00259"></a>00259                 m_old = (m_old<<1) - 1; <span class="comment">// get full mask from a bit</span>
+<a name="l00260"></a>00260                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
+<a name="l00261"></a>00261                 <span class="comment">// check whether it is rehashing/ed</span>
+<a name="l00262"></a>00262 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00263"></a>00263 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&( get_bucket(h & m_old)->node_list )) != rehash_req )
+<a name="l00264"></a>00264 <span class="preprocessor">#else</span>
+<a name="l00265"></a>00265 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( __TBB_load_with_acquire(get_bucket( h & m_old )->node_list) != rehash_req )
+<a name="l00266"></a>00266 <span class="preprocessor">#endif</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00268"></a>00268             }
+<a name="l00269"></a>00269             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00270"></a>00270         }
+<a name="l00271"></a>00271 
+<a name="l00273"></a>00273         segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {
+<a name="l00274"></a>00274             size_type sz = ++my_size; <span class="comment">// prefix form is to enforce allocation after the first item inserted</span>
+<a name="l00275"></a>00275             add_to_bucket( b, n );
+<a name="l00276"></a>00276             <span class="comment">// check load factor</span>
+<a name="l00277"></a>00277             <span class="keywordflow">if</span>( sz >= mask ) { <span class="comment">// TODO: add custom load_factor </span>
+<a name="l00278"></a>00278                 segment_index_t new_seg = segment_index_of( mask+1 );
+<a name="l00279"></a>00279                 __TBB_ASSERT( is_valid(my_table[new_seg-1]), <span class="stringliteral">"new allocations must not publish new mask until segment has allocated"</span>);
+<a name="l00280"></a>00280 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( !itt_load_pointer_v3(my_table+new_seg)
+<a name="l00282"></a>00282 #<span class="keywordflow">else</span>
+<a name="l00283"></a>00283                 <span class="keywordflow">if</span>( !my_table[new_seg]
+<a name="l00284"></a>00284 #endif
+<a name="l00285"></a>00285                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
+<a name="l00286"></a>00286                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
+<a name="l00287"></a>00287             }
+<a name="l00288"></a>00288             <span class="keywordflow">return</span> 0;
+<a name="l00289"></a>00289         }
+<a name="l00290"></a>00290 
+<a name="l00292"></a>00292         <span class="keywordtype">void</span> reserve(size_type buckets) {
+<a name="l00293"></a>00293             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
+<a name="l00294"></a>00294             <span class="keywordtype">bool</span> is_initial = !my_size;
+<a name="l00295"></a>00295             <span class="keywordflow">for</span>( size_type m = my_mask; buckets > m; m = my_mask )
+<a name="l00296"></a>00296                 enable_segment( segment_index_of( m+1 ), is_initial );
+<a name="l00297"></a>00297         }
+<a name="l00299"></a>00299         <span class="keywordtype">void</span> internal_swap(hash_map_base &table) {
+<a name="l00300"></a>00300             std::swap(this->my_mask, table.my_mask);
+<a name="l00301"></a>00301             std::swap(this->my_size, table.my_size);
+<a name="l00302"></a>00302             <span class="keywordflow">for</span>(size_type i = 0; i < embedded_buckets; i++)
+<a name="l00303"></a>00303                 std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
+<a name="l00304"></a>00304             <span class="keywordflow">for</span>(size_type i = embedded_block; i < pointers_per_table; i++)
+<a name="l00305"></a>00305                 std::swap(this->my_table[i], table.my_table[i]);
+<a name="l00306"></a>00306         }
+<a name="l00307"></a>00307     };
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00310"></a>00310     <span class="keyword">class </span>hash_map_range;
+<a name="l00311"></a>00311 
+<a name="l00313"></a>00313 
+<a name="l00315"></a>00315     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00316"></a>00316     <span class="keyword">class </span>hash_map_iterator
+<a name="l00317"></a>00317         : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
+<a name="l00318"></a>00318     {
+<a name="l00319"></a>00319         <span class="keyword">typedef</span> Container map_type;
+<a name="l00320"></a>00320         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
+<a name="l00321"></a>00321         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
+<a name="l00322"></a>00322         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
+<a name="l00323"></a>00323 
+<a name="l00324"></a>00324         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00325"></a>00325         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
+<a name="l00326"></a>00326 
+<a name="l00327"></a>00327         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00328"></a>00328         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00331"></a>00331         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> hash_map_iterator<C,T>& i, <span class="keyword">const</span> hash_map_iterator<C,U>& j );
+<a name="l00332"></a>00332     
+<a name="l00333"></a>00333         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00334"></a>00334         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_iterator;
+<a name="l00335"></a>00335 
+<a name="l00336"></a>00336         <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00337"></a>00337         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
+<a name="l00340"></a>00340             size_t k = my_index+1;
+<a name="l00341"></a>00341             <span class="keywordflow">while</span>( my_bucket && k <= my_map->my_mask ) {
+<a name="l00342"></a>00342                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00343"></a>00343                 <span class="keywordflow">if</span>( k& (k-2) ) <span class="comment">// not the beginning of a segment</span>
+<a name="l00344"></a>00344                     ++my_bucket;
+<a name="l00345"></a>00345                 <span class="keywordflow">else</span> my_bucket = my_map->get_bucket( k );
+<a name="l00346"></a>00346                 my_node = static_cast<node*>( my_bucket->node_list );
+<a name="l00347"></a>00347                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
+<a name="l00348"></a>00348                     my_index = k; <span class="keywordflow">return</span>;
+<a name="l00349"></a>00349                 }
+<a name="l00350"></a>00350                 ++k;
+<a name="l00351"></a>00351             }
+<a name="l00352"></a>00352             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
+<a name="l00353"></a>00353         }
+<a name="l00354"></a>00354 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00355"></a>00355 <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>
+<a name="l00356"></a>00356         <span class="keyword">friend</span> <span class="keyword">class </span>interface4::concurrent_hash_map;
+<a name="l00357"></a>00357 <span class="preprocessor">#else</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
+<a name="l00359"></a>00359 <span class="preprocessor">#endif</span>
+<a name="l00361"></a>00361 <span class="preprocessor">        const Container *my_map;</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span>
+<a name="l00364"></a>00364         size_t my_index;
+<a name="l00365"></a>00365 
+<a name="l00367"></a>00367         <span class="keyword">const</span> bucket *my_bucket;
+<a name="l00368"></a>00368 
+<a name="l00370"></a>00370         node *my_node;
+<a name="l00371"></a>00371 
+<a name="l00372"></a>00372         hash_map_iterator( <span class="keyword">const</span> Container &map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n );
+<a name="l00373"></a>00373 
+<a name="l00374"></a>00374     <span class="keyword">public</span>:
+<a name="l00376"></a>00376         hash_map_iterator() {}
+<a name="l00377"></a>00377         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator<Container,typename Container::value_type> &other ) :
+<a name="l00378"></a>00378             my_map(other.my_map),
+<a name="l00379"></a>00379             my_index(other.my_index),
+<a name="l00380"></a>00380             my_bucket(other.my_bucket),
+<a name="l00381"></a>00381             my_node(other.my_node)
+<a name="l00382"></a>00382         {}
+<a name="l00383"></a>00383         Value& operator*()<span class="keyword"> const </span>{
+<a name="l00384"></a>00384             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
+<a name="l00385"></a>00385             <span class="keywordflow">return</span> my_node->item;
+<a name="l00386"></a>00386         }
+<a name="l00387"></a>00387         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00388"></a>00388         hash_map_iterator& operator++();
+<a name="l00389"></a>00389         
+<a name="l00391"></a>00391         Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00392"></a>00392             Value* result = &operator*();
+<a name="l00393"></a>00393             operator++();
+<a name="l00394"></a>00394             <span class="keywordflow">return</span> result;
+<a name="l00395"></a>00395         }
+<a name="l00396"></a>00396     };
+<a name="l00397"></a>00397 
+<a name="l00398"></a>00398     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00399"></a>00399     hash_map_iterator<Container,Value>::hash_map_iterator( <span class="keyword">const</span> Container &map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n ) :
+<a name="l00400"></a>00400         my_map(&map),
+<a name="l00401"></a>00401         my_index(index),
+<a name="l00402"></a>00402         my_bucket(b),
+<a name="l00403"></a>00403         my_node( static_cast<node*>(n) )
+<a name="l00404"></a>00404     {
+<a name="l00405"></a>00405         <span class="keywordflow">if</span>( b && !hash_map_base::is_valid(n) )
+<a name="l00406"></a>00406             advance_to_next_bucket();
+<a name="l00407"></a>00407     }
+<a name="l00408"></a>00408 
+<a name="l00409"></a>00409     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00410"></a>00410     hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
+<a name="l00411"></a>00411         my_node = static_cast<node*>( my_node->next );
+<a name="l00412"></a>00412         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
+<a name="l00413"></a>00413         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00414"></a>00414     }
+<a name="l00415"></a>00415 
+<a name="l00416"></a>00416     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00417"></a>00417     <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 ) {
+<a name="l00418"></a>00418         <span class="keywordflow">return</span> i.my_node == j.my_node && i.my_map == j.my_map;
+<a name="l00419"></a>00419     }
+<a name="l00420"></a>00420 
+<a name="l00421"></a>00421     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00422"></a>00422     <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 ) {
+<a name="l00423"></a>00423         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
+<a name="l00424"></a>00424     }
+<a name="l00425"></a>00425 
+<a name="l00427"></a>00427 
+<a name="l00428"></a>00428     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00429"></a>00429     <span class="keyword">class </span>hash_map_range {
+<a name="l00430"></a>00430         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
+<a name="l00431"></a>00431         Iterator my_begin;
+<a name="l00432"></a>00432         Iterator my_end;
+<a name="l00433"></a>00433         <span class="keyword">mutable</span> Iterator my_midpoint;
+<a name="l00434"></a>00434         size_t my_grainsize;
+<a name="l00436"></a>00436         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
+<a name="l00437"></a>00437         <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
+<a name="l00438"></a>00438     <span class="keyword">public</span>:
+<a name="l00440"></a>00440         <span class="keyword">typedef</span> std::size_t size_type;
+<a name="l00441"></a>00441         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
+<a name="l00442"></a>00442         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
+<a name="l00443"></a>00443         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
+<a name="l00444"></a>00444         <span class="keyword">typedef</span> Iterator iterator;
+<a name="l00445"></a>00445 
+<a name="l00447"></a>00447         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
+<a name="l00448"></a>00448 
+<a name="l00450"></a>00450         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+<a name="l00451"></a>00451             <span class="keywordflow">return</span> my_midpoint!=my_end;
+<a name="l00452"></a>00452         }
+<a name="l00454"></a>00454         hash_map_range( hash_map_range& r, split ) : 
+<a name="l00455"></a>00455             my_end(r.my_end),
+<a name="l00456"></a>00456             my_grainsize(r.my_grainsize)
+<a name="l00457"></a>00457         {
+<a name="l00458"></a>00458             r.my_end = my_begin = r.my_midpoint;
+<a name="l00459"></a>00459             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00460"></a>00460             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00461"></a>00461             set_midpoint();
+<a name="l00462"></a>00462             r.set_midpoint();
+<a name="l00463"></a>00463         }
+<a name="l00465"></a>00465         <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00466"></a>00466         hash_map_range( hash_map_range<U>& r) : 
+<a name="l00467"></a>00467             my_begin(r.my_begin),
+<a name="l00468"></a>00468             my_end(r.my_end),
+<a name="l00469"></a>00469             my_midpoint(r.my_midpoint),
+<a name="l00470"></a>00470             my_grainsize(r.my_grainsize)
+<a name="l00471"></a>00471         {}
+<a name="l00472"></a>00472 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00474"></a>00474 <span class="preprocessor">        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) : </span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span>            my_begin(begin_), 
+<a name="l00476"></a>00476             my_end(end_),
+<a name="l00477"></a>00477             my_grainsize(grainsize_)
+<a name="l00478"></a>00478         {
+<a name="l00479"></a>00479             <span class="keywordflow">if</span>(!my_end.my_index && !my_end.my_bucket) <span class="comment">// end</span>
+<a name="l00480"></a>00480                 my_end.my_index = my_end.my_map->my_mask + 1;
+<a name="l00481"></a>00481             set_midpoint();
+<a name="l00482"></a>00482             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00483"></a>00483         }
+<a name="l00484"></a>00484 <span class="preprocessor">#endif</span>
+<a name="l00486"></a>00486 <span class="preprocessor">        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) : </span>
+<a name="l00487"></a>00487 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
+<a name="l00488"></a>00488             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
+<a name="l00489"></a>00489             my_grainsize( grainsize_ )
+<a name="l00490"></a>00490         {
+<a name="l00491"></a>00491             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00492"></a>00492             set_midpoint();
+<a name="l00493"></a>00493         }
+<a name="l00494"></a>00494         <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00495"></a>00495         <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00497"></a>00497         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00498"></a>00498     };
+<a name="l00499"></a>00499 
+<a name="l00500"></a>00500     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00501"></a>00501     <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
+<a name="l00502"></a>00502         <span class="comment">// Split by groups of nodes</span>
+<a name="l00503"></a>00503         size_t m = my_end.my_index-my_begin.my_index;
+<a name="l00504"></a>00504         <span class="keywordflow">if</span>( m > my_grainsize ) {
+<a name="l00505"></a>00505             m = my_begin.my_index + m/2u;
+<a name="l00506"></a>00506             hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
+<a name="l00507"></a>00507             my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
+<a name="l00508"></a>00508         } <span class="keywordflow">else</span> {
+<a name="l00509"></a>00509             my_midpoint = my_end;
+<a name="l00510"></a>00510         }
+<a name="l00511"></a>00511         __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
+<a name="l00512"></a>00512             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
+<a name="l00513"></a>00513         __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
+<a name="l00514"></a>00514             <span class="stringliteral">"my_midpoint is after my_end"</span> );
+<a name="l00515"></a>00515         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+<a name="l00516"></a>00516             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
+<a name="l00517"></a>00517     }
+<a name="l00518"></a>00518 
+<a name="l00519"></a>00519     } <span class="comment">// internal</span>
+<a name="l00521"></a>00521 <span class="comment"></span>
+<a name="l00523"></a><a class="code" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">00523</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t <a class="code" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = <span class="keyword">sizeof</span>(size_t)==4? 2654435769U : 11400714819323198485ULL;
+<a name="l00524"></a>00524 
+<a name="l00526"></a>00526 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00527"></a><a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">00527</a> <span class="keyword">inline</span> size_t <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>( <span class="keyword">const</span> T& t ) {
+<a name="l00528"></a>00528     <span class="keywordflow">return</span> static_cast<size_t>( t ) * <a class="code" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a>;
+<a name="l00529"></a>00529 }
+<a name="l00530"></a>00530 <span class="keyword">template</span><<span class="keyword">typename</span> P>
+<a name="l00531"></a>00531 <span class="keyword">inline</span> size_t tbb_hasher( P* ptr ) {
+<a name="l00532"></a>00532     size_t <span class="keyword">const</span> h = reinterpret_cast<size_t>( ptr );
+<a name="l00533"></a>00533     <span class="keywordflow">return</span> (h >> 3) ^ h;
+<a name="l00534"></a>00534 }
+<a name="l00535"></a>00535 <span class="keyword">template</span><<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A>
+<a name="l00536"></a>00536 <span class="keyword">inline</span> size_t <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
+<a name="l00537"></a>00537     size_t h = 0;
+<a name="l00538"></a>00538     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; c++ )
+<a name="l00539"></a>00539         h = static_cast<size_t>(*c) ^ (h * <a class="code" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a>);
+<a name="l00540"></a>00540     <span class="keywordflow">return</span> h;
+<a name="l00541"></a>00541 }
+<a name="l00542"></a>00542 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
+<a name="l00543"></a>00543 <span class="keyword">inline</span> size_t <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>( <span class="keyword">const</span> std::pair<F,S>& p ) {
+<a name="l00544"></a>00544     <span class="keywordflow">return</span> <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>(p.first) ^ <a class="code" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb_hasher</a>(p.second);
+<a name="l00545"></a>00545 }
+<a name="l00546"></a>00546 
+<a name="l00548"></a>00548 
+<a name="l00577"></a>00577 <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> Allocator>
+<a name="l00578"></a><a class="code" href="a00135.html">00578</a> <span class="keyword">class </span><a class="code" href="a00135.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
+<a name="l00579"></a>00579     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00580"></a>00580     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
+<a name="l00581"></a>00581 
+<a name="l00582"></a>00582     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00583"></a>00583     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
+<a name="l00584"></a>00584 
+<a name="l00585"></a>00585 <span class="keyword">public</span>:
+<a name="l00586"></a>00586     <span class="keyword">typedef</span> Key key_type;
+<a name="l00587"></a>00587     <span class="keyword">typedef</span> T mapped_type;
+<a name="l00588"></a>00588     <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
+<a name="l00589"></a>00589     <span class="keyword">typedef</span> hash_map_base::size_type size_type;
+<a name="l00590"></a>00590     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00591"></a>00591     <span class="keyword">typedef</span> value_type *pointer;
+<a name="l00592"></a>00592     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
+<a name="l00593"></a>00593     <span class="keyword">typedef</span> value_type &reference;
+<a name="l00594"></a>00594     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
+<a name="l00595"></a>00595     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
+<a name="l00596"></a>00596     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
+<a name="l00597"></a>00597     <span class="keyword">typedef</span> internal::hash_map_range<iterator> range_type;
+<a name="l00598"></a>00598     <span class="keyword">typedef</span> internal::hash_map_range<const_iterator> const_range_type;
+<a name="l00599"></a>00599     <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00600"></a>00600 
+<a name="l00601"></a>00601 <span class="keyword">protected</span>:
+<a name="l00602"></a>00602     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00138.html">const_accessor</a>;
+<a name="l00603"></a>00603     <span class="keyword">struct </span>node;
+<a name="l00604"></a>00604     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<node>::other node_allocator_type;
+<a name="l00605"></a>00605     node_allocator_type my_allocator;
+<a name="l00606"></a>00606     HashCompare my_hash_compare;
+<a name="l00607"></a>00607 
+<a name="l00608"></a>00608     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
+<a name="l00609"></a>00609         value_type item;
+<a name="l00610"></a>00610         node( <span class="keyword">const</span> Key &key ) : item(key, T()) {}
+<a name="l00611"></a>00611         node( <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T &t ) : item(key, t) {}
+<a name="l00612"></a>00612         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
+<a name="l00613"></a>00613         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &a ) {
+<a name="l00614"></a>00614             <span class="keywordtype">void</span> *ptr = a.allocate(1);
+<a name="l00615"></a>00615             <span class="keywordflow">if</span>(!ptr) 
+<a name="l00616"></a>00616                 tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
+<a name="l00617"></a>00617             <span class="keywordflow">return</span> ptr;
+<a name="l00618"></a>00618         }
+<a name="l00619"></a>00619         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
+<a name="l00620"></a>00620         <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); }
+<a name="l00621"></a>00621     };
+<a name="l00622"></a>00622 
+<a name="l00623"></a>00623     <span class="keywordtype">void</span> delete_node( node_base *n ) {
+<a name="l00624"></a>00624         my_allocator.destroy( static_cast<node*>(n) );
+<a name="l00625"></a>00625         my_allocator.deallocate( static_cast<node*>(n), 1);
+<a name="l00626"></a>00626     }
+<a name="l00627"></a>00627 
+<a name="l00628"></a>00628     node *search_bucket( <span class="keyword">const</span> key_type &key, bucket *b )<span class="keyword"> const </span>{
+<a name="l00629"></a>00629         node *n = static_cast<node*>( b->node_list );
+<a name="l00630"></a>00630         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
+<a name="l00631"></a>00631             n = static_cast<node*>( n->next );
+<a name="l00632"></a>00632         __TBB_ASSERT(n != internal::rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
+<a name="l00633"></a>00633         <span class="keywordflow">return</span> n;
+<a name="l00634"></a>00634     }
+<a name="l00635"></a>00635 
+<a name="l00637"></a><a class="code" href="a00137.html">00637</a>     <span class="keyword">class </span><a class="code" href="a00137.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
+<a name="l00638"></a>00638         <span class="keywordtype">bool</span> my_is_writer; <span class="comment">// TODO: use it from base type</span>
+<a name="l00639"></a>00639         bucket *my_b;
+<a name="l00640"></a>00640     <span class="keyword">public</span>:
+<a name="l00641"></a>00641         <a class="code" href="a00137.html">bucket_accessor</a>( <a class="code" href="a00135.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) { <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
+<a name="l00643"></a><a class="code" href="a00137.html#7b75959ce5a971b05cfefcbc1d09a022">00643</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00135.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) {
+<a name="l00644"></a>00644             my_b = base->get_bucket( h );
+<a name="l00645"></a>00645 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00646"></a>00646 <span class="preprocessor"></span>            <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
+<a name="l00647"></a>00647             <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&my_b->node_list) == internal::rehash_req
+<a name="l00648"></a>00648 #<span class="keywordflow">else</span>
+<a name="l00649"></a>00649             <span class="keywordflow">if</span>( __TBB_load_with_acquire(my_b->node_list) == internal::rehash_req
+<a name="l00650"></a>00650 #endif
+<a name="l00651"></a>00651                 && try_acquire( my_b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
+<a name="l00652"></a>00652             {
+<a name="l00653"></a>00653                 <span class="keywordflow">if</span>( my_b->node_list == internal::rehash_req ) base-><a class="code" href="a00135.html#f2fe44bde2158a2f2a315c6457ebd030">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
+<a name="l00654"></a>00654                 my_is_writer = <span class="keyword">true</span>;
+<a name="l00655"></a>00655             }
+<a name="l00656"></a>00656             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b->mutex, <span class="comment">/*write=*/</span>my_is_writer = writer );
+<a name="l00657"></a>00657             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
+<a name="l00658"></a>00658         }
+<a name="l00660"></a><a class="code" href="a00137.html#adf8e405df5787351fe816c42042b9ec">00660</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> my_is_writer; }
+<a name="l00662"></a><a class="code" href="a00137.html#7e98ad1b46ed35fb4a92d65c16c6982d">00662</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
+<a name="l00663"></a>00663         <span class="comment">// TODO: optimize out</span>
+<a name="l00664"></a>00664         <span class="keywordtype">bool</span> upgrade_to_writer() { my_is_writer = <span class="keyword">true</span>; <span class="keywordflow">return</span> bucket::scoped_t::upgrade_to_writer(); }
+<a name="l00665"></a>00665     };
+<a name="l00666"></a>00666 
+<a name="l00667"></a>00667     <span class="comment">// TODO refactor to hash_base</span>
+<a name="l00668"></a>00668     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
+<a name="l00669"></a>00669         __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
+<a name="l00670"></a>00670         __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
+<a name="l00671"></a>00671         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); <span class="comment">// mark rehashed</span>
+<a name="l00672"></a>00672         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l00673"></a>00673 
+<a name="l00674"></a>00674         bucket_accessor b_old( <span class="keyword">this</span>, h & mask );
+<a name="l00675"></a>00675 
+<a name="l00676"></a>00676         mask = (mask<<1) | 1; <span class="comment">// get full mask for new bucket</span>
+<a name="l00677"></a>00677         __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
+<a name="l00678"></a>00678     restart:
+<a name="l00679"></a>00679         <span class="keywordflow">for</span>( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {
+<a name="l00680"></a>00680             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+<a name="l00681"></a>00681 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00682"></a>00682 <span class="preprocessor"></span>            hashcode_t bmask = h & (mask>>1);
+<a name="l00683"></a>00683             bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; <span class="comment">// minimal mask of parent bucket</span>
+<a name="l00684"></a>00684             __TBB_ASSERT( (c & bmask) == (h & bmask), <span class="stringliteral">"hash() function changed for key in table"</span> );
+<a name="l00685"></a>00685 <span class="preprocessor">#endif</span>
+<a name="l00686"></a>00686 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( (c & mask) == h ) {
+<a name="l00687"></a>00687                 <span class="keywordflow">if</span>( !b_old.is_writer() )
+<a name="l00688"></a>00688                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
+<a name="l00689"></a>00689                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
+<a name="l00690"></a>00690                     }
+<a name="l00691"></a>00691                 *p = n->next; <span class="comment">// exclude from b_old</span>
+<a name="l00692"></a>00692                 add_to_bucket( b_new, n );
+<a name="l00693"></a>00693             } <span class="keywordflow">else</span> p = &n->next; <span class="comment">// iterate to next item</span>
+<a name="l00694"></a>00694         }
+<a name="l00695"></a>00695     }
+<a name="l00696"></a>00696 
+<a name="l00697"></a>00697 <span class="keyword">public</span>:
+<a name="l00698"></a>00698     
+<a name="l00699"></a>00699     <span class="keyword">class </span>accessor;
+<a name="l00701"></a><a class="code" href="a00138.html">00701</a>     <span class="keyword">class </span><a class="code" href="a00138.html">const_accessor</a> {
+<a name="l00702"></a>00702         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00135.html">concurrent_hash_map</a><Key,T,HashCompare,Allocator>;
+<a name="l00703"></a>00703         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00136.html">accessor</a>;
+<a name="l00704"></a>00704         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00136.html">accessor</a> & ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
+<a name="l00705"></a>00705         <a class="code" href="a00138.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00136.html">accessor</a> & );       <span class="comment">// Deny access</span>
+<a name="l00706"></a>00706     <span class="keyword">public</span>:
+<a name="l00708"></a><a class="code" href="a00138.html#b5de4197079009b1cfd8bdeb594c6428">00708</a>         <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
+<a name="l00709"></a>00709 
+<a name="l00711"></a><a class="code" href="a00138.html#e55c7c3f0acd7fd823a07957e71a7462">00711</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
+<a name="l00712"></a>00712 
+<a name="l00714"></a><a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">00714</a>         <span class="keywordtype">void</span> <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00715"></a>00715             <span class="keywordflow">if</span>( my_node ) {
+<a name="l00716"></a>00716                 my_lock.release();
+<a name="l00717"></a>00717                 my_node = 0;
+<a name="l00718"></a>00718             }
+<a name="l00719"></a>00719         }
+<a name="l00720"></a>00720 
+<a name="l00722"></a><a class="code" href="a00138.html#d95b7a39a08b7ab256dfff2ca37cdb75">00722</a>         const_reference operator*()<span class="keyword"> const </span>{
+<a name="l00723"></a>00723             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00724"></a>00724             <span class="keywordflow">return</span> my_node->item;
+<a name="l00725"></a>00725         }
+<a name="l00726"></a>00726 
+<a name="l00728"></a><a class="code" href="a00138.html#6fc0491f6420ffe38c48786e7b9ab042">00728</a>         const_pointer operator->()<span class="keyword"> const </span>{
+<a name="l00729"></a>00729             <span class="keywordflow">return</span> &operator*();
+<a name="l00730"></a>00730         }
+<a name="l00731"></a>00731 
+<a name="l00733"></a><a class="code" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">00733</a>         <a class="code" href="a00138.html">const_accessor</a>() : my_node(NULL) {}
+<a name="l00734"></a>00734 
+<a name="l00736"></a><a class="code" href="a00138.html#e002771760f510e06c03e0a198286172">00736</a>         ~<a class="code" href="a00138.html">const_accessor</a>() {
+<a name="l00737"></a>00737             my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
+<a name="l00738"></a>00738         }
+<a name="l00739"></a>00739     <span class="keyword">private</span>:
+<a name="l00740"></a>00740         node *my_node;
+<a name="l00741"></a>00741         <span class="keyword">typename</span> node::scoped_t my_lock;
+<a name="l00742"></a>00742         hashcode_t my_hash;
+<a name="l00743"></a>00743     };
+<a name="l00744"></a>00744 
+<a name="l00746"></a><a class="code" href="a00136.html">00746</a>     <span class="keyword">class </span><a class="code" href="a00136.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00138.html">const_accessor</a> {
+<a name="l00747"></a>00747     <span class="keyword">public</span>:
+<a name="l00749"></a><a class="code" href="a00136.html#34035ddb9e2a27f2f0a1f6a2a16730cf">00749</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
+<a name="l00750"></a>00750 
+<a name="l00752"></a><a class="code" href="a00136.html#03a091f7355a3c0c03f839893695f372">00752</a>         reference operator*()<span class="keyword"> const </span>{
+<a name="l00753"></a>00753             __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00754"></a>00754             <span class="keywordflow">return</span> this->my_node->item;
+<a name="l00755"></a>00755         }
+<a name="l00756"></a>00756 
+<a name="l00758"></a><a class="code" href="a00136.html#302f02e5deec0a67b872e9cfb08d9e60">00758</a>         pointer operator->()<span class="keyword"> const </span>{
+<a name="l00759"></a>00759             <span class="keywordflow">return</span> &operator*();
+<a name="l00760"></a>00760         }
+<a name="l00761"></a>00761     };
+<a name="l00762"></a>00762 
+<a name="l00764"></a><a class="code" href="a00135.html#342582ba05d9fb893ed80875d2b7a42f">00764</a>     <a class="code" href="a00135.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00765"></a>00765         : my_allocator(a)
+<a name="l00766"></a>00766     {}
+<a name="l00767"></a>00767 
+<a name="l00769"></a><a class="code" href="a00135.html#c1bf3c669935aceb1dc0169e3a19e0be">00769</a>     <a class="code" href="a00135.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00770"></a>00770         : my_allocator(a)
+<a name="l00771"></a>00771     {
+<a name="l00772"></a>00772         reserve( n );
+<a name="l00773"></a>00773     }
+<a name="l00774"></a>00774 
+<a name="l00776"></a><a class="code" href="a00135.html#bc50f7bca65d0c27cbf5c31d2fa63eac">00776</a>     <a class="code" href="a00135.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00777"></a>00777         : my_allocator(a)
+<a name="l00778"></a>00778     {
+<a name="l00779"></a>00779         internal_copy(table);
+<a name="l00780"></a>00780     }
+<a name="l00781"></a>00781 
+<a name="l00783"></a>00783     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00784"></a><a class="code" href="a00135.html#b5132202dff9ee3d619bef6b1d84edea">00784</a>     <a class="code" href="a00135.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00785"></a>00785         : my_allocator(a)
+<a name="l00786"></a>00786     {
+<a name="l00787"></a>00787         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
+<a name="l00788"></a>00788         internal_copy(first, last);
+<a name="l00789"></a>00789     }
+<a name="l00790"></a>00790 
+<a name="l00792"></a><a class="code" href="a00135.html#adadeb9d1acb8c3b34517435666cf297">00792</a>     <a class="code" href="a00135.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_hash_map</a>& table ) {
+<a name="l00793"></a>00793         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
+<a name="l00794"></a>00794             clear();
+<a name="l00795"></a>00795             internal_copy(table);
+<a name="l00796"></a>00796         } 
+<a name="l00797"></a>00797         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00798"></a>00798     }
+<a name="l00799"></a>00799 
+<a name="l00800"></a>00800 
+<a name="l00802"></a>00802 
+<a name="l00804"></a>00804     <span class="keywordtype">void</span> rehash(size_type n = 0);
+<a name="l00805"></a>00805     
+<a name="l00807"></a>00807     <span class="keywordtype">void</span> clear();
+<a name="l00808"></a>00808 
+<a name="l00810"></a><a class="code" href="a00135.html#5e96649f71f68f3b6bf3b1eee6b441a7">00810</a>     ~<a class="code" href="a00135.html">concurrent_hash_map</a>() { clear(); }
+<a name="l00811"></a>00811 
+<a name="l00812"></a>00812     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00813"></a>00813     <span class="comment">// Parallel algorithm support</span>
+<a name="l00814"></a>00814     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00815"></a>00815     range_type range( size_type grainsize=1 ) {
+<a name="l00816"></a>00816         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00817"></a>00817     }
+<a name="l00818"></a>00818     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
+<a name="l00819"></a>00819         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00820"></a>00820     }
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00823"></a>00823     <span class="comment">// STL support - not thread-safe methods</span>
+<a name="l00824"></a>00824     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00825"></a>00825     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
+<a name="l00826"></a>00826     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
+<a name="l00827"></a>00827     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
+<a name="l00828"></a>00828     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,0,0);}
+<a name="l00829"></a>00829     std::pair<iterator, iterator> equal_range( <span class="keyword">const</span> Key& key ) { <span class="keywordflow">return</span> internal_equal_range(key, end()); }
+<a name="l00830"></a>00830     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()); }
+<a name="l00831"></a>00831     
+<a name="l00833"></a><a class="code" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">00833</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
+<a name="l00834"></a>00834 
+<a name="l00836"></a><a class="code" href="a00135.html#3e5d085375320cd3f34faeedc5bba8f6">00836</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
+<a name="l00837"></a>00837 
+<a name="l00839"></a><a class="code" href="a00135.html#6ed260e217fb310050928d7bd03f1b5e">00839</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(node);}
+<a name="l00840"></a>00840 
+<a name="l00842"></a><a class="code" href="a00135.html#d1c1e23f2a3ba1f943d00d95388d718f">00842</a>     size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_mask+1; }
+<a name="l00843"></a>00843 
+<a name="l00845"></a><a class="code" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">00845</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00846"></a>00846 
+<a name="l00848"></a>00848     <span class="keywordtype">void</span> swap(<a class="code" href="a00135.html">concurrent_hash_map</a> &table);
+<a name="l00849"></a>00849 
+<a name="l00850"></a>00850     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00851"></a>00851     <span class="comment">// concurrent map operations</span>
+<a name="l00852"></a>00852     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00853"></a>00853 
+<a name="l00855"></a><a class="code" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">00855</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
+<a name="l00856"></a>00856         <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>, key, NULL, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00857"></a>00857     }
+<a name="l00858"></a>00858 
+<a name="l00860"></a>00860 
+<a name="l00861"></a><a class="code" href="a00135.html#9fa1ca60af4ef761a100617b27718585">00861</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00138.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
+<a name="l00862"></a>00862         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00863"></a>00863         <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>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00864"></a>00864     }
+<a name="l00865"></a>00865 
+<a name="l00867"></a>00867 
+<a name="l00868"></a><a class="code" href="a00135.html#4f7cc0aab2d8216c0a6e681f32dd48c8">00868</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00136.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00869"></a>00869         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00870"></a>00870         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">false</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00871"></a>00871     }
+<a name="l00872"></a>00872         
+<a name="l00874"></a>00874 
+<a name="l00875"></a><a class="code" href="a00135.html#67d8c254b1666d89267c8a4a33c864f3">00875</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00138.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00876"></a>00876         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00877"></a>00877         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00878"></a>00878     }
+<a name="l00879"></a>00879 
+<a name="l00881"></a>00881 
+<a name="l00882"></a><a class="code" href="a00135.html#8ea81ff7fea044f859273b354c91c185">00882</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00136.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00883"></a>00883         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00884"></a>00884         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00885"></a>00885     }
+<a name="l00886"></a>00886 
+<a name="l00888"></a>00888 
+<a name="l00889"></a><a class="code" href="a00135.html#68a46a26bd4308c1780d021ca7e8fc15">00889</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00138.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00890"></a>00890         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00891"></a>00891         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, &result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 
+<a name="l00895"></a>00895 
+<a name="l00896"></a><a class="code" href="a00135.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">00896</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00136.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00897"></a>00897         result.<a class="code" href="a00138.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00898"></a>00898         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, &result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00899"></a>00899     }
+<a name="l00900"></a>00900 
+<a name="l00902"></a>00902 
+<a name="l00903"></a><a class="code" href="a00135.html#3034a308bc839695a5714a107380c4b9">00903</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
+<a name="l00904"></a>00904         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &value.second, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00905"></a>00905     }
+<a name="l00906"></a>00906 
+<a name="l00908"></a>00908     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00909"></a><a class="code" href="a00135.html#7b42dba04d71e1367f0d542087906178">00909</a>     <span class="keywordtype">void</span> insert(I first, I last) {
+<a name="l00910"></a>00910         <span class="keywordflow">for</span>(; first != last; ++first)
+<a name="l00911"></a>00911             insert( *first );
+<a name="l00912"></a>00912     }
+<a name="l00913"></a>00913 
+<a name="l00915"></a>00915 
+<a name="l00916"></a>00916     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
+<a name="l00917"></a>00917 
+<a name="l00919"></a>00919 
+<a name="l00920"></a><a class="code" href="a00135.html#fc64086f9f518cef8c368c9429d0064e">00920</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00138.html">const_accessor</a>& item_accessor ) {
+<a name="l00921"></a>00921         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
+<a name="l00922"></a>00922     }
+<a name="l00923"></a>00923 
+<a name="l00925"></a>00925 
+<a name="l00926"></a><a class="code" href="a00135.html#b65abfa291da566617dd58dfb349630a">00926</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00136.html">accessor</a>& item_accessor ) {
+<a name="l00927"></a>00927         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
+<a name="l00928"></a>00928     }
+<a name="l00929"></a>00929 
+<a name="l00930"></a>00930 <span class="keyword">protected</span>:
+<a name="l00932"></a>00932     <span class="keywordtype">bool</span> lookup( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T *t, const_accessor *result, <span class="keywordtype">bool</span> write );
+<a name="l00933"></a>00933 
+<a name="l00935"></a>00935     <span class="keywordtype">bool</span> exclude( const_accessor &item_accessor, <span class="keywordtype">bool</span> readonly );
+<a name="l00936"></a>00936 
+<a name="l00938"></a>00938     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00939"></a>00939     std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
+<a name="l00940"></a>00940 
+<a name="l00942"></a>00942     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_hash_map</a>& source );
+<a name="l00943"></a>00943 
+<a name="l00944"></a>00944     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00945"></a>00945     <span class="keywordtype">void</span> internal_copy(I first, I last);
+<a name="l00946"></a>00946 
+<a name="l00948"></a>00948 
+<a name="l00950"></a><a class="code" href="a00135.html#f0cdf5930563a49ffe827c520e948e01">00950</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
+<a name="l00951"></a>00951         hashcode_t h = my_hash_compare.hash( key );
+<a name="l00952"></a>00952 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00953"></a>00953 <span class="preprocessor"></span>        hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l00954"></a>00954 <span class="preprocessor">#else</span>
+<a name="l00955"></a>00955 <span class="preprocessor"></span>        hashcode_t m = my_mask;
+<a name="l00956"></a>00956 <span class="preprocessor">#endif</span>
+<a name="l00957"></a>00957 <span class="preprocessor"></span>        node *n;
+<a name="l00958"></a>00958     restart:
+<a name="l00959"></a>00959         __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l00960"></a>00960         bucket *b = get_bucket( h & m );
+<a name="l00961"></a>00961 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00962"></a>00962 <span class="preprocessor"></span>        <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
+<a name="l00963"></a>00963         <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&b->node_list) == internal::rehash_req )
+<a name="l00964"></a>00964 <span class="preprocessor">#else</span>
+<a name="l00965"></a>00965 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( __TBB_load_with_acquire(b->node_list) == internal::rehash_req )
+<a name="l00966"></a>00966 <span class="preprocessor">#endif</span>
+<a name="l00967"></a>00967 <span class="preprocessor"></span>        {
+<a name="l00968"></a>00968             bucket::scoped_t lock;
+<a name="l00969"></a>00969             <span class="keywordflow">if</span>( lock.try_acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) ) {
+<a name="l00970"></a>00970                 <span class="keywordflow">if</span>( b->node_list == internal::rehash_req)
+<a name="l00971"></a>00971                     const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->rehash_bucket( b, h & m ); <span class="comment">//recursive rehashing</span>
+<a name="l00972"></a>00972             }
+<a name="l00973"></a>00973             <span class="keywordflow">else</span> lock.acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00974"></a>00974             __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);
+<a name="l00975"></a>00975         }
+<a name="l00976"></a>00976         n = search_bucket( key, b );
+<a name="l00977"></a>00977         <span class="keywordflow">if</span>( n )
+<a name="l00978"></a>00978             <span class="keywordflow">return</span> &n->item;
+<a name="l00979"></a>00979         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l00980"></a>00980             <span class="keywordflow">goto</span> restart;
+<a name="l00981"></a>00981         <span class="keywordflow">return</span> 0;
+<a name="l00982"></a>00982     }
+<a name="l00983"></a>00983 };
+<a name="l00984"></a>00984 
+<a name="l00985"></a>00985 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00986"></a>00986 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
+<a name="l00987"></a>00987 <span class="preprocessor">    #pragma warning( push )</span>
+<a name="l00988"></a>00988 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
+<a name="l00989"></a>00989 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00990"></a>00990 <span class="preprocessor"></span>
+<a name="l00991"></a>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>
+<a name="l00992"></a><a class="code" href="a00135.html#0f0ba43d9cb783f12dd01bf5677da097">00992</a> <span class="keywordtype">bool</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::lookup</a>( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T *t, <a class="code" href="a00138.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
+<a name="l00993"></a>00993     __TBB_ASSERT( !result || !result-><a class="code" href="a00138.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
+<a name="l00994"></a>00994     segment_index_t grow_segment;
+<a name="l00995"></a>00995     <span class="keywordtype">bool</span> return_value;
+<a name="l00996"></a>00996     node *n, *tmp_n = 0;
+<a name="l00997"></a>00997     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l00998"></a>00998 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00999"></a>00999 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l01000"></a>01000 <span class="preprocessor">#else</span>
+<a name="l01001"></a>01001 <span class="preprocessor"></span>    hashcode_t m = my_mask;
+<a name="l01002"></a>01002 <span class="preprocessor">#endif</span>
+<a name="l01003"></a>01003 <span class="preprocessor"></span>    restart:
+<a name="l01004"></a>01004     {<span class="comment">//lock scope</span>
+<a name="l01005"></a>01005         __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l01006"></a>01006         return_value = <span class="keyword">false</span>;
+<a name="l01007"></a>01007         <span class="comment">// get bucket</span>
+<a name="l01008"></a>01008         <a class="code" href="a00137.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<a name="l01009"></a>01009 
+<a name="l01010"></a>01010         <span class="comment">// find a node</span>
+<a name="l01011"></a>01011         n = search_bucket( key, b() );
+<a name="l01012"></a>01012         <span class="keywordflow">if</span>( op_insert ) {
+<a name="l01013"></a>01013             <span class="comment">// [opt] insert a key</span>
+<a name="l01014"></a>01014             <span class="keywordflow">if</span>( !n ) {
+<a name="l01015"></a>01015                 <span class="keywordflow">if</span>( !tmp_n ) {
+<a name="l01016"></a>01016                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
+<a name="l01017"></a>01017                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
+<a name="l01018"></a>01018                 }
+<a name="l01019"></a>01019                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00137.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() && !b.<a class="code" href="a00137.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) { <span class="comment">// TODO: improved insertion</span>
+<a name="l01020"></a>01020                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
+<a name="l01021"></a>01021                     n = search_bucket( key, b() );
+<a name="l01022"></a>01022                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
+<a name="l01023"></a>01023                         b.downgrade_to_reader();
+<a name="l01024"></a>01024                         <span class="keywordflow">goto</span> exists;
+<a name="l01025"></a>01025                     }
+<a name="l01026"></a>01026                 }
+<a name="l01027"></a>01027                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
+<a name="l01028"></a>01028                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
+<a name="l01029"></a>01029                 <span class="comment">// insert and set flag to grow the container</span>
+<a name="l01030"></a>01030                 grow_segment = insert_new_node( b(), n = tmp_n, m );
+<a name="l01031"></a>01031                 tmp_n = 0;
+<a name="l01032"></a>01032                 return_value = <span class="keyword">true</span>;
+<a name="l01033"></a>01033             } <span class="keywordflow">else</span> {
+<a name="l01034"></a>01034     exists:     grow_segment = 0;
+<a name="l01035"></a>01035             }
+<a name="l01036"></a>01036         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
+<a name="l01037"></a>01037             <span class="keywordflow">if</span>( !n ) {
+<a name="l01038"></a>01038                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01039"></a>01039                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
+<a name="l01040"></a>01040                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01041"></a>01041             }
+<a name="l01042"></a>01042             return_value = <span class="keyword">true</span>;
+<a name="l01043"></a>01043             grow_segment = 0;
+<a name="l01044"></a>01044         }
+<a name="l01045"></a>01045         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
+<a name="l01046"></a>01046         <span class="comment">// TODO: the following seems as generic/regular operation</span>
+<a name="l01047"></a>01047         <span class="comment">// acquire the item</span>
+<a name="l01048"></a>01048         <span class="keywordflow">if</span>( !result-><a class="code" href="a00138.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n->mutex, write ) ) {
+<a name="l01049"></a>01049             <span class="comment">// we are unlucky, prepare for longer wait</span>
+<a name="l01050"></a>01050             <a class="code" href="a00124.html">tbb::internal::atomic_backoff</a> trials;
+<a name="l01051"></a>01051             <span class="keywordflow">do</span> {
+<a name="l01052"></a>01052                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
+<a name="l01053"></a>01053                     <span class="comment">// the wait takes really long, restart the operation</span>
+<a name="l01054"></a>01054                     b.release();
+<a name="l01055"></a>01055                     __TBB_ASSERT( !op_insert || !return_value, <span class="stringliteral">"Can't acquire new item in locked bucket?"</span> );
+<a name="l01056"></a>01056                     __TBB_Yield();
+<a name="l01057"></a>01057 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l01058"></a>01058 <span class="preprocessor"></span>                    m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l01059"></a>01059 <span class="preprocessor">#else</span>
+<a name="l01060"></a>01060 <span class="preprocessor"></span>                    m = my_mask;
+<a name="l01061"></a>01061 <span class="preprocessor">#endif</span>
+<a name="l01062"></a>01062 <span class="preprocessor"></span>                    <span class="keywordflow">goto</span> restart;
+<a name="l01063"></a>01063                 }
+<a name="l01064"></a>01064             } <span class="keywordflow">while</span>( !result-><a class="code" href="a00138.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n->mutex, write ) );
+<a name="l01065"></a>01065         }
+<a name="l01066"></a>01066     }<span class="comment">//lock scope</span>
+<a name="l01067"></a>01067     result-><a class="code" href="a00138.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = n;
+<a name="l01068"></a>01068     result-><a class="code" href="a00138.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a> = h;
+<a name="l01069"></a>01069 check_growth:
+<a name="l01070"></a>01070     <span class="comment">// [opt] grow the container</span>
+<a name="l01071"></a>01071     <span class="keywordflow">if</span>( grow_segment )
+<a name="l01072"></a>01072         enable_segment( grow_segment );
+<a name="l01073"></a>01073     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
+<a name="l01074"></a>01074         delete_node( tmp_n );
+<a name="l01075"></a>01075     <span class="keywordflow">return</span> return_value;
+<a name="l01076"></a>01076 }
+<a name="l01077"></a>01077 
+<a name="l01078"></a>01078 <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="l01079"></a>01079 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l01080"></a><a class="code" href="a00135.html#308ec5ad19fdd1be4d345f8013070150">01080</a> std::pair<I, I> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range</a>( <span class="keyword">const</span> Key& key, I end_ )<span class="keyword"> const </span>{
+<a name="l01081"></a>01081     hashcode_t h = my_hash_compare.hash( key );
+<a name="l01082"></a>01082     hashcode_t m = my_mask;
+<a name="l01083"></a>01083     __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l01084"></a>01084     h &= m;
+<a name="l01085"></a>01085     bucket *b = get_bucket( h );
+<a name="l01086"></a>01086     <span class="keywordflow">while</span>( b->node_list == internal::rehash_req ) {
+<a name="l01087"></a>01087         m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l01088"></a>01088         b = get_bucket( h &= m );
+<a name="l01089"></a>01089     }
+<a name="l01090"></a>01090     node *n = search_bucket( key, b );
+<a name="l01091"></a>01091     <span class="keywordflow">if</span>( !n )
+<a name="l01092"></a>01092         <span class="keywordflow">return</span> std::make_pair(end_, end_);
+<a name="l01093"></a>01093     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
+<a name="l01094"></a>01094     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
+<a name="l01095"></a>01095 }
+<a name="l01096"></a>01096 
+<a name="l01097"></a>01097 <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="l01098"></a><a class="code" href="a00135.html#671965989ffb5f6084c776cb0bb6cdab">01098</a> <span class="keywordtype">bool</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00138.html">const_accessor</a> &item_accessor, <span class="keywordtype">bool</span> readonly ) {
+<a name="l01099"></a>01099     __TBB_ASSERT( item_accessor.<a class="code" href="a00138.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
+<a name="l01100"></a>01100     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00138.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>;
+<a name="l01101"></a>01101     item_accessor.<a class="code" href="a00138.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = NULL; <span class="comment">// we ought release accessor anyway</span>
+<a name="l01102"></a>01102     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00138.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a>;
+<a name="l01103"></a>01103 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l01104"></a>01104 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l01105"></a>01105 <span class="preprocessor">#else</span>
+<a name="l01106"></a>01106 <span class="preprocessor"></span>    hashcode_t m = my_mask;
+<a name="l01107"></a>01107 <span class="preprocessor">#endif</span>
+<a name="l01108"></a>01108 <span class="preprocessor"></span>    <span class="keywordflow">do</span> {
+<a name="l01109"></a>01109         <span class="comment">// get bucket</span>
+<a name="l01110"></a>01110         <a class="code" href="a00137.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
+<a name="l01111"></a>01111         node_base **p = &b()->node_list;
+<a name="l01112"></a>01112         <span class="keywordflow">while</span>( *p && *p != n )
+<a name="l01113"></a>01113             p = &(*p)->next;
+<a name="l01114"></a>01114         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
+<a name="l01115"></a>01115             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01116"></a>01116                 <span class="keywordflow">continue</span>;
+<a name="l01117"></a>01117             item_accessor.<a class="code" href="a00138.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
+<a name="l01118"></a>01118             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01119"></a>01119         }
+<a name="l01120"></a>01120         __TBB_ASSERT( *p == n, NULL );
+<a name="l01121"></a>01121         *p = n->next; <span class="comment">// remove from container</span>
+<a name="l01122"></a>01122         my_size--;
+<a name="l01123"></a>01123         <span class="keywordflow">break</span>;
+<a name="l01124"></a>01124     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
+<a name="l01125"></a>01125     <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
+<a name="l01126"></a>01126         item_accessor.<a class="code" href="a00138.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
+<a name="l01127"></a>01127     item_accessor.<a class="code" href="a00138.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
+<a name="l01128"></a>01128     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
+<a name="l01129"></a>01129     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01130"></a>01130 }
+<a name="l01131"></a>01131 
+<a name="l01132"></a>01132 <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="l01133"></a><a class="code" href="a00135.html#58df7a1e4373c55eb4c2fa9dc69516b1">01133</a> <span class="keywordtype">bool</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
+<a name="l01134"></a>01134     node_base *n;
+<a name="l01135"></a>01135     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l01136"></a>01136 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l01137"></a>01137 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+<a name="l01138"></a>01138 <span class="preprocessor">#else</span>
+<a name="l01139"></a>01139 <span class="preprocessor"></span>    hashcode_t m = my_mask;
+<a name="l01140"></a>01140 <span class="preprocessor">#endif</span>
+<a name="l01141"></a>01141 <span class="preprocessor"></span>restart:
+<a name="l01142"></a>01142     {<span class="comment">//lock scope</span>
+<a name="l01143"></a>01143         <span class="comment">// get bucket</span>
+<a name="l01144"></a>01144         <a class="code" href="a00137.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<a name="l01145"></a>01145     search:
+<a name="l01146"></a>01146         node_base **p = &b()->node_list;
+<a name="l01147"></a>01147         n = *p;
+<a name="l01148"></a>01148         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
+<a name="l01149"></a>01149             p = &n->next;
+<a name="l01150"></a>01150             n = *p;
+<a name="l01151"></a>01151         }
+<a name="l01152"></a>01152         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
+<a name="l01153"></a>01153             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01154"></a>01154                 <span class="keywordflow">goto</span> restart;
+<a name="l01155"></a>01155             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01156"></a>01156         }
+<a name="l01157"></a>01157         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00137.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() && !b.<a class="code" href="a00137.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) {
+<a name="l01158"></a>01158             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
+<a name="l01159"></a>01159                 <span class="keywordflow">goto</span> restart;
+<a name="l01160"></a>01160             <span class="keywordflow">goto</span> search;
+<a name="l01161"></a>01161         }
+<a name="l01162"></a>01162         *p = n->next;
+<a name="l01163"></a>01163         my_size--;
+<a name="l01164"></a>01164     }
+<a name="l01165"></a>01165     {
+<a name="l01166"></a>01166         <span class="keyword">typename</span> node::scoped_t item_locker( n->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l01167"></a>01167     }
+<a name="l01168"></a>01168     <span class="comment">// note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!</span>
+<a name="l01169"></a>01169     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
+<a name="l01170"></a>01170     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01171"></a>01171 }
+<a name="l01172"></a>01172 
+<a name="l01173"></a>01173 <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="l01174"></a>01174 <span class="keywordtype">void</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
+<a name="l01175"></a>01175     std::swap(this->my_allocator, table.<a class="code" href="a00135.html#964dbe9bfcb2ac0157f8b77f252f951b">my_allocator</a>);
+<a name="l01176"></a>01176     std::swap(this->my_hash_compare, table.<a class="code" href="a00135.html#1d13c1f34b3826f9235b82ea90818169">my_hash_compare</a>);
+<a name="l01177"></a>01177     internal_swap(table);
+<a name="l01178"></a>01178 }
+<a name="l01179"></a>01179 
+<a name="l01180"></a>01180 <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="l01181"></a><a class="code" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">01181</a> <span class="keywordtype">void</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::rehash</a>(size_type sz) {
+<a name="l01182"></a>01182     reserve( sz ); <span class="comment">// TODO: add reduction of number of buckets as well</span>
+<a name="l01183"></a>01183     hashcode_t mask = my_mask;
+<a name="l01184"></a>01184     hashcode_t b = (mask+1)>>1; <span class="comment">// size or first index of the last segment</span>
+<a name="l01185"></a>01185     __TBB_ASSERT((b&(b-1))==0, NULL);
+<a name="l01186"></a>01186     bucket *bp = get_bucket( b ); <span class="comment">// only the last segment should be scanned for rehashing</span>
+<a name="l01187"></a>01187     <span class="keywordflow">for</span>(; b <= mask; b++, bp++ ) {
+<a name="l01188"></a>01188         node_base *n = bp->node_list;
+<a name="l01189"></a>01189         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01190"></a>01190         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
+<a name="l01191"></a>01191         <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// rehash bucket, conditional because rehashing of a previous bucket may affect this one</span>
+<a name="l01192"></a>01192             hashcode_t h = b; bucket *b_old = bp;
+<a name="l01193"></a>01193             <span class="keywordflow">do</span> {
+<a name="l01194"></a>01194                 __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
+<a name="l01195"></a>01195                 hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l01196"></a>01196                 b_old = get_bucket( h &= m );
+<a name="l01197"></a>01197             } <span class="keywordflow">while</span>( b_old->node_list == internal::rehash_req );
+<a name="l01198"></a>01198             <span class="comment">// now h - is index of the root rehashed bucket b_old</span>
+<a name="l01199"></a>01199             mark_rehashed_levels( h ); <span class="comment">// mark all non-rehashed children recursively across all segments</span>
+<a name="l01200"></a>01200             <span class="keywordflow">for</span>( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {
+<a name="l01201"></a>01201                 hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );
+<a name="l01202"></a>01202                 <span class="keywordflow">if</span>( (c & mask) != h ) { <span class="comment">// should be rehashed</span>
+<a name="l01203"></a>01203                     *p = q->next; <span class="comment">// exclude from b_old</span>
+<a name="l01204"></a>01204                     bucket *b_new = get_bucket( c & mask );
+<a name="l01205"></a>01205                     __TBB_ASSERT( b_new->node_list != internal::rehash_req, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
+<a name="l01206"></a>01206                     add_to_bucket( b_new, q );
+<a name="l01207"></a>01207                 } <span class="keywordflow">else</span> p = &q->next; <span class="comment">// iterate to next item</span>
+<a name="l01208"></a>01208             }
+<a name="l01209"></a>01209         }
+<a name="l01210"></a>01210     }
+<a name="l01211"></a>01211 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01212"></a>01212 <span class="preprocessor"></span>    <span class="keywordtype">int</span> current_size = int(my_size), buckets = int(mask)+1, empty_buckets = 0, overpopulated_buckets = 0; <span class="comment">// usage statistics</span>
+<a name="l01213"></a>01213     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+<a name="l01214"></a>01214 <span class="preprocessor">#endif</span>
+<a name="l01215"></a>01215 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01216"></a>01216 <span class="preprocessor"></span>    <span class="keywordflow">for</span>( b = 0; b <= mask; b++ ) {<span class="comment">// only last segment should be scanned for rehashing</span>
+<a name="l01217"></a>01217         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
+<a name="l01218"></a>01218         <span class="keywordflow">else</span> bp = get_bucket( b );
+<a name="l01219"></a>01219         node_base *n = bp->node_list;
+<a name="l01220"></a>01220         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
+<a name="l01221"></a>01221         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01222"></a>01222 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01223"></a>01223 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
+<a name="l01224"></a>01224         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
+<a name="l01225"></a>01225 <span class="preprocessor">#endif</span>
+<a name="l01226"></a>01226 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l01227"></a>01227 <span class="preprocessor"></span>        <span class="keywordflow">for</span>( ; is_valid(n); n = n->next ) {
+<a name="l01228"></a>01228             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;
+<a name="l01229"></a>01229             __TBB_ASSERT( h == b, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
+<a name="l01230"></a>01230         }
+<a name="l01231"></a>01231 <span class="preprocessor">#endif</span>
+<a name="l01232"></a>01232 <span class="preprocessor"></span>    }
+<a name="l01233"></a>01233 <span class="preprocessor">#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01234"></a>01234 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01235"></a>01235 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
+<a name="l01236"></a>01236     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
+<a name="l01237"></a>01237     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+<a name="l01238"></a>01238         tbb::internal::runtime_warning(
+<a name="l01239"></a>01239             <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d"</span>,
+<a name="l01240"></a>01240             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+<a name="l01241"></a>01241         reported = <span class="keyword">true</span>;
+<a name="l01242"></a>01242     }
+<a name="l01243"></a>01243 <span class="preprocessor">#endif</span>
+<a name="l01244"></a>01244 <span class="preprocessor"></span>}
+<a name="l01245"></a>01245 
+<a name="l01246"></a>01246 <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="l01247"></a><a class="code" href="a00135.html#36bcd50fd5383f3682032323b2d74333">01247</a> <span class="keywordtype">void</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
+<a name="l01248"></a>01248     hashcode_t m = my_mask;
+<a name="l01249"></a>01249     __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l01250"></a>01250 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01251"></a>01251 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01252"></a>01252 <span class="preprocessor"></span>    <span class="keywordtype">int</span> current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; <span class="comment">// usage statistics</span>
+<a name="l01253"></a>01253     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+<a name="l01254"></a>01254 <span class="preprocessor">#endif</span>
+<a name="l01255"></a>01255 <span class="preprocessor"></span>    bucket *bp = 0;
+<a name="l01256"></a>01256     <span class="comment">// check consistency</span>
+<a name="l01257"></a>01257     <span class="keywordflow">for</span>( segment_index_t b = 0; b <= m; b++ ) {
+<a name="l01258"></a>01258         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
+<a name="l01259"></a>01259         <span class="keywordflow">else</span> bp = get_bucket( b );
+<a name="l01260"></a>01260         node_base *n = bp->node_list;
+<a name="l01261"></a>01261         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01262"></a>01262         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during clear() execution"</span> );
+<a name="l01263"></a>01263 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01264"></a>01264 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
+<a name="l01265"></a>01265         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == internal::rehash_req ) buckets--;
+<a name="l01266"></a>01266         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
+<a name="l01267"></a>01267 <span class="preprocessor">#endif</span>
+<a name="l01268"></a>01268 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l01269"></a>01269 <span class="preprocessor"></span>        <span class="keywordflow">for</span>(; is_valid(n); n = n->next ) {
+<a name="l01270"></a>01270             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+<a name="l01271"></a>01271             h &= m;
+<a name="l01272"></a>01272             __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
+<a name="l01273"></a>01273         }
+<a name="l01274"></a>01274 <span class="preprocessor">#endif</span>
+<a name="l01275"></a>01275 <span class="preprocessor"></span>    }
+<a name="l01276"></a>01276 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01277"></a>01277 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
+<a name="l01278"></a>01278     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
+<a name="l01279"></a>01279     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+<a name="l01280"></a>01280         tbb::internal::runtime_warning(
+<a name="l01281"></a>01281             <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d"</span>,
+<a name="l01282"></a>01282             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+<a name="l01283"></a>01283         reported = <span class="keyword">true</span>;
+<a name="l01284"></a>01284     }
+<a name="l01285"></a>01285 <span class="preprocessor">#endif</span>
+<a name="l01286"></a>01286 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01287"></a>01287 <span class="preprocessor"></span>    my_size = 0;
+<a name="l01288"></a>01288     segment_index_t s = segment_index_of( m );
+<a name="l01289"></a>01289     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01290"></a>01290     <a class="code" href="a00130.html">cache_aligned_allocator<bucket></a> alloc;
+<a name="l01291"></a>01291     <span class="keywordflow">do</span> {
+<a name="l01292"></a>01292         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01293"></a>01293         segment_ptr_t buckets_ptr = my_table[s];
+<a name="l01294"></a>01294         size_type sz = segment_size( s ? s : 1 );
+<a name="l01295"></a>01295         <span class="keywordflow">for</span>( segment_index_t i = 0; i < sz; i++ )
+<a name="l01296"></a>01296             <span class="keywordflow">for</span>( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {
+<a name="l01297"></a>01297                 buckets_ptr[i].node_list = n->next;
+<a name="l01298"></a>01298                 delete_node( n );
+<a name="l01299"></a>01299             }
+<a name="l01300"></a>01300         <span class="keywordflow">if</span>( s >= first_block) <span class="comment">// the first segment or the next</span>
+<a name="l01301"></a>01301             alloc.<a class="code" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, sz );
+<a name="l01302"></a>01302         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block && embedded_block != first_block )
+<a name="l01303"></a>01303             alloc.<a class="code" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, segment_size(first_block)-embedded_buckets );
+<a name="l01304"></a>01304         <span class="keywordflow">if</span>( s >= embedded_block ) my_table[s] = 0;
+<a name="l01305"></a>01305     } <span class="keywordflow">while</span>(s-- > 0);
+<a name="l01306"></a>01306     my_mask = embedded_buckets - 1;
+<a name="l01307"></a>01307 }
+<a name="l01308"></a>01308 
+<a name="l01309"></a>01309 <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="l01310"></a><a class="code" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">01310</a> <span class="keywordtype">void</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_hash_map</a>& source ) {
+<a name="l01311"></a>01311     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
+<a name="l01312"></a>01312     hashcode_t mask = source.my_mask;
+<a name="l01313"></a>01313     <span class="keywordflow">if</span>( my_mask == mask ) { <span class="comment">// optimized version</span>
+<a name="l01314"></a>01314         bucket *dst = 0, *src = 0;
+<a name="l01315"></a>01315         <span class="keywordtype">bool</span> rehash_required = <span class="keyword">false</span>;
+<a name="l01316"></a>01316         <span class="keywordflow">for</span>( hashcode_t k = 0; k <= mask; k++ ) {
+<a name="l01317"></a>01317             <span class="keywordflow">if</span>( k & (k-2) ) ++dst,src++; <span class="comment">// not the beginning of a segment</span>
+<a name="l01318"></a>01318             <span class="keywordflow">else</span> { dst = get_bucket( k ); src = source.get_bucket( k ); }
+<a name="l01319"></a>01319             __TBB_ASSERT( dst->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01320"></a>01320             node *n = static_cast<node*>( src->node_list );
+<a name="l01321"></a>01321             <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// source is not rehashed, items are in previous buckets</span>
+<a name="l01322"></a>01322                 rehash_required = <span class="keyword">true</span>;
+<a name="l01323"></a>01323                 dst->node_list = internal::rehash_req;
+<a name="l01324"></a>01324             } <span class="keywordflow">else</span> <span class="keywordflow">for</span>(; n; n = static_cast<node*>( n->next ) ) {
+<a name="l01325"></a>01325                 add_to_bucket( dst, <span class="keyword">new</span>( my_allocator ) node(n->item.first, n->item.second) );
+<a name="l01326"></a>01326                 ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01327"></a>01327             }
+<a name="l01328"></a>01328         }
+<a name="l01329"></a>01329         <span class="keywordflow">if</span>( rehash_required ) <a class="code" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">rehash</a>();
+<a name="l01330"></a>01330     } <span class="keywordflow">else</span> <a class="code" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>( source.<a class="code" href="a00135.html#dfb7ab010b46fc194673256479c2ea48">begin</a>(), source.<a class="code" href="a00135.html#7e2dd7c8b3d37a93ba551e4de33bb73d">end</a>() );
+<a name="l01331"></a>01331 }
+<a name="l01332"></a>01332 
+<a name="l01333"></a>01333 <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="l01334"></a>01334 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l01335"></a>01335 <span class="keywordtype">void</span> <a class="code" href="a00135.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
+<a name="l01336"></a>01336     hashcode_t m = my_mask;
+<a name="l01337"></a>01337     <span class="keywordflow">for</span>(; first != last; ++first) {
+<a name="l01338"></a>01338         hashcode_t h = my_hash_compare.hash( first->first );
+<a name="l01339"></a>01339         bucket *b = get_bucket( h & m );
+<a name="l01340"></a>01340         __TBB_ASSERT( b->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01341"></a>01341         node *n = <span class="keyword">new</span>( my_allocator ) node(first->first, first->second);
+<a name="l01342"></a>01342         add_to_bucket( b, n );
+<a name="l01343"></a>01343         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01344"></a>01344     }
+<a name="l01345"></a>01345 }
+<a name="l01346"></a>01346 
+<a name="l01347"></a>01347 } <span class="comment">// namespace interface4</span>
+<a name="l01348"></a>01348 
+<a name="l01349"></a>01349 <span class="keyword">using</span> interface4::tbb_hasher;
+<a name="l01350"></a>01350 <span class="keyword">using</span> interface4::concurrent_hash_map;
+<a name="l01351"></a>01351 
+<a name="l01352"></a>01352 
+<a name="l01353"></a>01353 <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>
+<a name="l01354"></a>01354 <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) {
+<a name="l01355"></a>01355     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01356"></a>01356     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
+<a name="l01357"></a>01357     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
+<a name="l01358"></a>01358     <span class="keywordflow">for</span>(; i != i_end; ++i) {
+<a name="l01359"></a>01359         j = b.equal_range(i->first).first;
+<a name="l01360"></a>01360         <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01361"></a>01361     }
+<a name="l01362"></a>01362     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01363"></a>01363 }
+<a name="l01364"></a>01364 
+<a name="l01365"></a>01365 <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>
+<a name="l01366"></a>01366 <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)
+<a name="l01367"></a>01367 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01368"></a>01368 
+<a name="l01369"></a>01369 <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="l01370"></a>01370 <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)
+<a name="l01371"></a>01371 {    a.swap( b ); }
+<a name="l01372"></a>01372 
+<a name="l01373"></a>01373 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l01374"></a>01374 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
+<a name="l01375"></a>01375 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
+<a name="l01376"></a>01376 <span class="preprocessor"></span>
+<a name="l01377"></a>01377 } <span class="comment">// namespace tbb</span>
+<a name="l01378"></a>01378 
+<a name="l01379"></a>01379 <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/a00282.html b/doc/html/a00282.html
deleted file mode 100644
index 2d08848..0000000
--- a/doc/html/a00282.html
+++ /dev/null
@@ -1,361 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "_concurrent_queue_internal.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00029"></a>00029 
-<a name="l00031"></a>00031 
-<a name="l00034"></a>00034 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A = cache_aligned_allocator<T> > 
-<a name="l00035"></a><a class="code" href="a00134.html">00035</a> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3<T> {
-<a name="l00036"></a>00036     <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>internal::concurrent_queue_iterator;
-<a name="l00037"></a>00037 
-<a name="l00039"></a>00039     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
-<a name="l00040"></a>00040     page_allocator_type my_allocator;
-<a name="l00041"></a>00041 
-<a name="l00043"></a>00043     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) {
-<a name="l00044"></a>00044         <span class="keywordtype">void</span> *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
-<a name="l00045"></a>00045         <span class="keywordflow">if</span>( !b ) this->internal_throw_exception(); 
-<a name="l00046"></a>00046         <span class="keywordflow">return</span> b;
-<a name="l00047"></a>00047     }
-<a name="l00048"></a>00048 
-<a name="l00050"></a>00050     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *b, size_t n ) {
-<a name="l00051"></a>00051         my_allocator.deallocate( reinterpret_cast<char*>(b), n );
-<a name="l00052"></a>00052     }
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">public</span>:
-<a name="l00056"></a><a class="code" href="a00134.html#682c3978d5cb0620000994f11c44a476">00056</a>     <span class="keyword">typedef</span> T <a class="code" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
-<a name="l00057"></a>00057 
-<a name="l00059"></a><a class="code" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">00059</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
-<a name="l00060"></a>00060 
-<a name="l00062"></a><a class="code" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">00062</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">00065</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
-<a name="l00066"></a>00066 
-<a name="l00068"></a><a class="code" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">00068</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
-<a name="l00069"></a>00069 
-<a name="l00071"></a><a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">00071</a>     <span class="keyword">typedef</span> A <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
-<a name="l00072"></a>00072 
-<a name="l00074"></a><a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00074</a>     <span class="keyword">explicit</span> <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
-<a name="l00075"></a>00075         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
-<a name="l00076"></a>00076     {
-<a name="l00077"></a>00077     }
-<a name="l00078"></a>00078 
-<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00081"></a><a class="code" href="a00134.html#25209656c84f2f9b030e2f9162713341">00081</a>     <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) :
-<a name="l00082"></a>00082         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
-<a name="l00083"></a>00083     {
-<a name="l00084"></a>00084         <span class="keywordflow">for</span>( ; begin != end; ++begin )
-<a name="l00085"></a>00085             internal_push(&*begin);
-<a name="l00086"></a>00086     }
-<a name="l00087"></a>00087     
-<a name="l00089"></a><a class="code" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">00089</a>     <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00134.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac" [...]
-<a name="l00090"></a>00090         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
-<a name="l00091"></a>00091     {
-<a name="l00092"></a>00092         assign( src );
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094     
-<a name="l00096"></a>00096     <a class="code" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
-<a name="l00097"></a>00097 
-<a name="l00099"></a><a class="code" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">00099</a>     <span class="keywordtype">void</span> <a class="code" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00100"></a>00100         internal_push( &source );
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102 
-<a name="l00104"></a>00104 
-<a name="l00106"></a><a class="code" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T& result ) {
-<a name="l00107"></a>00107         <span class="keywordflow">return</span> internal_try_pop( &result );
-<a name="l00108"></a>00108     }
-<a name="l00109"></a>00109 
-<a name="l00111"></a><a class="code" href="a00134.html#eaa35a5274606779802e9a669a706260">00111</a>     <a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->internal_size();}
-<a name="l00112"></a>00112 
-<a name="l00114"></a><a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00114</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->internal_empty();}
-<a name="l00115"></a>00115 
-<a name="l00117"></a>00117     <span class="keywordtype">void</span> <a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
-<a name="l00118"></a>00118 
-<a name="l00120"></a><a class="code" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">00120</a>     <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
-<a name="l00123"></a>00123     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
-<a name="l00127"></a>00127     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00128"></a>00128     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
-<a name="l00129"></a>00129     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
-<a name="l00130"></a>00130     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
-<a name="l00131"></a>00131     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
-<a name="l00132"></a>00132 } ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00135"></a><a class="code" href="a00134.html#830b33753d6b149c366344e29b2edd8c">00135</a> <a class="code" href="a00134.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
-<a name="l00136"></a>00136     <a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>();
-<a name="l00137"></a>00137     this->internal_finish_clear();
-<a name="l00138"></a>00138 }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00141"></a><a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">00141</a> <span class="keywordtype">void</span> <a class="code" href="a00134.html">concurrent_queue<T,A>::clear</a>() {
-<a name="l00142"></a>00142     <span class="keywordflow">while</span>( !<a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() ) {
-<a name="l00143"></a>00143         T value;
-<a name="l00144"></a>00144         internal_try_pop(&value);
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146 }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00149"></a>00149     
-<a name="l00151"></a>00151 
-<a name="l00156"></a>00156 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
-<a name="l00157"></a><a class="code" href="a00129.html">00157</a> <span class="keyword">class </span><a class="code" href="a00129.html">concurrent_bounded_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3 {
-<a name="l00158"></a>00158     <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>internal::concurrent_queue_iterator;
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
-<a name="l00162"></a>00162     page_allocator_type my_allocator;
-<a name="l00163"></a>00163 
-<a name="l00165"></a>00165     <span class="keyword">class </span>destroyer: internal::no_copy {
-<a name="l00166"></a>00166         T& my_value;
-<a name="l00167"></a>00167     <span class="keyword">public</span>:
-<a name="l00168"></a>00168         destroyer( T& value ) : my_value(value) {}
-<a name="l00169"></a>00169         ~destroyer() {my_value.~T();}          
-<a name="l00170"></a>00170     };
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     T& get_ref( page& page, size_t index ) {
-<a name="l00173"></a>00173         __TBB_ASSERT( index<items_per_page, NULL );
-<a name="l00174"></a>00174         <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     <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 ) {
-<a name="l00178"></a>00178         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
-<a name="l00179"></a>00179     }
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
-<a name="l00182"></a>00182         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185     <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 ) {
-<a name="l00186"></a>00186         T& from = get_ref(src,index);
-<a name="l00187"></a>00187         destroyer d(from);
-<a name="l00188"></a>00188         *static_cast<T*>(dst) = from;
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> page *allocate_page() {
-<a name="l00192"></a>00192         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
-<a name="l00193"></a>00193         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
-<a name="l00194"></a>00194         <span class="keywordflow">if</span>( !p ) internal_throw_exception(); 
-<a name="l00195"></a>00195         <span class="keywordflow">return</span> p;
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
-<a name="l00199"></a>00199         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
-<a name="l00200"></a>00200         my_allocator.deallocate( reinterpret_cast<char*>(p), n );
-<a name="l00201"></a>00201     }
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 <span class="keyword">public</span>:
-<a name="l00205"></a><a class="code" href="a00129.html#98245517a931e5893f6601e66c51fc75">00205</a>     <span class="keyword">typedef</span> T <a class="code" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
-<a name="l00206"></a>00206 
-<a name="l00208"></a><a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">00208</a>     <span class="keyword">typedef</span> A <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
-<a name="l00209"></a>00209 
-<a name="l00211"></a><a class="code" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">00211</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
-<a name="l00212"></a>00212 
-<a name="l00214"></a><a class="code" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">00214</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
-<a name="l00215"></a>00215 
-<a name="l00217"></a>00217 
-<a name="l00219"></a><a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">00219</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
-<a name="l00220"></a>00220 
-<a name="l00222"></a><a class="code" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">00222</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
-<a name="l00223"></a>00223 
-<a name="l00225"></a><a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">00225</a>     <span class="keyword">explicit</span> <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
-<a name="l00226"></a>00226         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00227"></a>00227     {
-<a name="l00228"></a>00228     }
-<a name="l00229"></a>00229 
-<a name="l00231"></a><a class="code" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00231</a>     <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00129.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00129.html#2e2726fccf6d975dc [...]
-<a name="l00232"></a>00232         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00233"></a>00233     {
-<a name="l00234"></a>00234         assign( src );
-<a name="l00235"></a>00235     }
-<a name="l00236"></a>00236 
-<a name="l00238"></a>00238     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00239"></a><a class="code" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">00239</a>     <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) :
-<a name="l00240"></a>00240         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00241"></a>00241     {
-<a name="l00242"></a>00242         <span class="keywordflow">for</span>( ; begin != end; ++begin )
-<a name="l00243"></a>00243             internal_push_if_not_full(&*begin);
-<a name="l00244"></a>00244     }
-<a name="l00245"></a>00245 
-<a name="l00247"></a>00247     <a class="code" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
-<a name="l00248"></a>00248 
-<a name="l00250"></a><a class="code" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">00250</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00251"></a>00251         internal_push( &source );
-<a name="l00252"></a>00252     }
-<a name="l00253"></a>00253 
-<a name="l00255"></a>00255 
-<a name="l00256"></a><a class="code" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">00256</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>( T& destination ) {
-<a name="l00257"></a>00257         internal_pop( &destination );
-<a name="l00258"></a>00258     }
-<a name="l00259"></a>00259 
-<a name="l00261"></a>00261 
-<a name="l00263"></a><a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">00263</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00264"></a>00264         <span class="keywordflow">return</span> internal_push_if_not_full( &source );
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266 
-<a name="l00268"></a>00268 
-<a name="l00270"></a><a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">00270</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( T& destination ) {
-<a name="l00271"></a>00271         <span class="keywordflow">return</span> internal_pop_if_present( &destination );
-<a name="l00272"></a>00272     }
-<a name="l00273"></a>00273 
-<a name="l00275"></a>00275 
-<a name="l00278"></a><a class="code" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">00278</a>     <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
-<a name="l00279"></a>00279 
-<a name="l00281"></a><a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">00281</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_empty();}
-<a name="l00282"></a>00282 
-<a name="l00284"></a><a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">00284</a>     <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>()<span class="keyword"> const </span>{
-<a name="l00285"></a>00285         <span class="keywordflow">return</span> my_capacity;
-<a name="l00286"></a>00286     }
-<a name="l00287"></a>00287 
-<a name="l00289"></a>00289 
-<a name="l00291"></a><a class="code" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">00291</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>( <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> ) {
-<a name="l00292"></a>00292         internal_set_capacity( capacity, <span class="keyword">sizeof</span>(T) );
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294 
-<a name="l00296"></a><a class="code" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">00296</a>     <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00297"></a>00297 
-<a name="l00299"></a>00299     <span class="keywordtype">void</span> <a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>() ;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;
-<a name="l00302"></a>00302     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00305"></a>00305     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
-<a name="l00306"></a>00306     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00307"></a>00307     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
-<a name="l00308"></a>00308     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
-<a name="l00309"></a>00309     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
-<a name="l00310"></a>00310     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 }; 
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00315"></a><a class="code" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">00315</a> <a class="code" href="a00129.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
-<a name="l00316"></a>00316     <a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>();
-<a name="l00317"></a>00317     internal_finish_clear();
-<a name="l00318"></a>00318 }
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00321"></a><a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00129.html">concurrent_bounded_queue<T,A>::clear</a>() {
-<a name="l00322"></a>00322     <span class="keywordflow">while</span>( !<a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() ) {
-<a name="l00323"></a>00323         T value;
-<a name="l00324"></a>00324         internal_pop_if_present(&value);
-<a name="l00325"></a>00325     }
-<a name="l00326"></a>00326 }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="keyword">namespace </span>deprecated {
-<a name="l00329"></a>00329 
-<a name="l00331"></a>00331 
-<a name="l00336"></a>00336 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> > 
-<a name="l00337"></a><a class="code" href="a00135.html">00337</a> <span class="keyword">class </span><a class="code" href="a00135.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00129.html">concurrent_bounded_queue</a><T,A> {
-<a name="l00338"></a>00338 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00339"></a>00339 <span class="preprocessor"></span>    <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>internal::concurrent_queue_iterator;
-<a name="l00340"></a>00340 <span class="preprocessor">#endif </span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span>
-<a name="l00342"></a>00342 <span class="keyword">public</span>:
-<a name="l00344"></a><a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">00344</a>     <span class="keyword">explicit</span> <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
-<a name="l00345"></a>00345         <a class="code" href="a00129.html">concurrent_bounded_queue</a><T,A>( a )
-<a name="l00346"></a>00346     {
-<a name="l00347"></a>00347     }
-<a name="l00348"></a>00348 
-<a name="l00350"></a><a class="code" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">00350</a>     <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
-<a name="l00351"></a>00351         <a class="code" href="a00129.html">concurrent_bounded_queue</a><T,A>( src, a )
-<a name="l00352"></a>00352     {
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354 
-<a name="l00356"></a>00356     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00357"></a><a class="code" href="a00135.html#383187b910f8c3ca27a39c1638566f15">00357</a>     <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> A& a = A()) :
-<a name="l00358"></a>00358         <a class="code" href="a00129.html">concurrent_bounded_queue</a><T,A>( begin, end, a )
-<a name="l00359"></a>00359     {
-<a name="l00360"></a>00360     }
-<a name="l00361"></a>00361 
-<a name="l00363"></a>00363 
-<a name="l00365"></a><a class="code" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">00365</a>     <span class="keywordtype">bool</span> <a class="code" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00366"></a>00366         <span class="keywordflow">return</span> <a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( source );
-<a name="l00367"></a>00367     }
-<a name="l00368"></a>00368 
-<a name="l00370"></a>00370 
-<a name="l00374"></a><a class="code" href="a00135.html#48da3536245318af6cb5fd58bac78039">00374</a>     <span class="keywordtype">bool</span> <a class="code" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
-<a name="l00375"></a>00375         <span class="keywordflow">return</span> <a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( destination );
-<a name="l00376"></a>00376     }
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00129.html">concurrent_bounded_queue<T,A>::iterator</a> iterator;
-<a name="l00379"></a>00379     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00129.html">concurrent_bounded_queue<T,A>::const_iterator</a> const_iterator;
-<a name="l00380"></a>00380     <span class="comment">//</span>
-<a name="l00381"></a>00381     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00382"></a>00382     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
-<a name="l00383"></a>00383     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00384"></a>00384     iterator begin() {<span class="keywordflow">return</span> this->unsafe_begin();}
-<a name="l00385"></a>00385     iterator end() {<span class="keywordflow">return</span> this->unsafe_end();}
-<a name="l00386"></a>00386     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_begin();}
-<a name="l00387"></a>00387     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_end();}
-<a name="l00388"></a>00388 }; 
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390 }
-<a name="l00391"></a>00391     
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="keyword">using</span> deprecated::concurrent_queue;
-<a name="l00395"></a>00395 <span class="preprocessor">#else</span>
-<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="keyword">using</span> strict_ppl::concurrent_queue;    
-<a name="l00397"></a>00397 <span class="preprocessor">#endif</span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span>
-<a name="l00399"></a>00399 } <span class="comment">// namespace tbb</span>
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 <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/a00292.html b/doc/html/a00292.html
index 3eb0687..c1a1cde 100644
--- a/doc/html/a00292.html
+++ b/doc/html/a00292.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>enumerable_thread_specific.h Source File</title>
+<title>concurrent_queue.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>enumerable_thread_specific.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,828 +39,319 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_enumerable_thread_specific_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_enumerable_thread_specific_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "concurrent_vector.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#if __SUNPRO_CC</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#else</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="keyword">namespace </span>tbb {
-<a name="l00039"></a>00039 
-<a name="l00041"></a><a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">00041</a>     <span class="keyword">enum</span> <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
-<a name="l00042"></a>00042 
-<a name="l00044"></a>00044     <span class="keyword">namespace </span>internal {
-<a name="l00045"></a>00045         
-<a name="l00047"></a>00047         <span class="keyword">template</span>< <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value >
-<a name="l00048"></a>00048         <span class="keyword">class </span>enumerable_thread_specific_iterator 
-<a name="l00049"></a>00049 #if defined(_WIN64) && defined(_MSC_VER) 
-<a name="l00050"></a>00050             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-<a name="l00051"></a>00051             : public std::iterator<std::random_access_iterator_tag,Value>
-<a name="l00052"></a>00052 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-<a name="l00053"></a>00053         {
-<a name="l00055"></a>00055         
-<a name="l00056"></a>00056             Container *my_container;
-<a name="l00057"></a>00057             <span class="keyword">typename</span> Container::size_type my_index;
-<a name="l00058"></a>00058             <span class="keyword">mutable</span> Value *my_value;
-<a name="l00059"></a>00059         
-<a name="l00060"></a>00060             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-<a name="l00061"></a>00061             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
-<a name="l00062"></a>00062                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
-<a name="l00063"></a>00063         
-<a name="l00064"></a>00064             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00065"></a>00065             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& i, 
-<a name="l00066"></a>00066                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00067"></a>00067         
-<a name="l00068"></a>00068             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00069"></a>00069             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
-<a name="l00070"></a>00070                                    <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00071"></a>00071         
-<a name="l00072"></a>00072             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00073"></a>00073             <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& i, <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00074"></a>00074             
-<a name="l00075"></a>00075             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00076"></a>00076             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
-<a name="l00077"></a>00077         
-<a name="l00078"></a>00078             <span class="keyword">public</span>:
-<a name="l00079"></a>00079         
-<a name="l00080"></a>00080             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
-<a name="l00081"></a>00081                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
-<a name="l00082"></a>00082         
-<a name="l00084"></a>00084             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
-<a name="l00085"></a>00085         
-<a name="l00086"></a>00086             <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00087"></a>00087             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
-<a name="l00088"></a>00088                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
-<a name="l00089"></a>00089         
-<a name="l00090"></a>00090             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00091"></a>00091                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
-<a name="l00092"></a>00092             }
-<a name="l00093"></a>00093         
-<a name="l00094"></a>00094             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00095"></a>00095                 my_index += offset;
-<a name="l00096"></a>00096                 my_value = NULL;
-<a name="l00097"></a>00097                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00098"></a>00098             }
-<a name="l00099"></a>00099         
-<a name="l00100"></a>00100             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00101"></a>00101                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
-<a name="l00102"></a>00102             }
-<a name="l00103"></a>00103         
-<a name="l00104"></a>00104             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00105"></a>00105                 my_index -= offset;
-<a name="l00106"></a>00106                 my_value = NULL;
-<a name="l00107"></a>00107                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00108"></a>00108             }
-<a name="l00109"></a>00109         
-<a name="l00110"></a>00110             Value& operator*()<span class="keyword"> const </span>{
-<a name="l00111"></a>00111                 Value* value = my_value;
-<a name="l00112"></a>00112                 <span class="keywordflow">if</span>( !value ) {
-<a name="l00113"></a>00113                     value = my_value = &(*my_container)[my_index].value;
-<a name="l00114"></a>00114                 }
-<a name="l00115"></a>00115                 __TBB_ASSERT( value==&(*my_container)[my_index].value, <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00116"></a>00116                 <span class="keywordflow">return</span> *value;
-<a name="l00117"></a>00117             }
-<a name="l00118"></a>00118         
-<a name="l00119"></a>00119             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00120"></a>00120                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
-<a name="l00121"></a>00121             }
-<a name="l00122"></a>00122         
-<a name="l00123"></a>00123             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00124"></a>00124         
-<a name="l00125"></a>00125             enumerable_thread_specific_iterator& operator++() {
-<a name="l00126"></a>00126                 ++my_index;
-<a name="l00127"></a>00127                 my_value = NULL;
-<a name="l00128"></a>00128                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00129"></a>00129             }
-<a name="l00130"></a>00130         
-<a name="l00131"></a>00131             enumerable_thread_specific_iterator& operator--() {
-<a name="l00132"></a>00132                 --my_index;
-<a name="l00133"></a>00133                 my_value = NULL;
-<a name="l00134"></a>00134                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00135"></a>00135             }
-<a name="l00136"></a>00136         
-<a name="l00138"></a>00138             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00139"></a>00139                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00140"></a>00140                 ++my_index;
-<a name="l00141"></a>00141                 my_value = NULL;
-<a name="l00142"></a>00142                 <span class="keywordflow">return</span> result;
-<a name="l00143"></a>00143             }
-<a name="l00144"></a>00144         
-<a name="l00146"></a>00146             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00147"></a>00147                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00148"></a>00148                 --my_index;
-<a name="l00149"></a>00149                 my_value = NULL;
-<a name="l00150"></a>00150                 <span class="keywordflow">return</span> result;
-<a name="l00151"></a>00151             }
-<a name="l00152"></a>00152         
-<a name="l00153"></a>00153             <span class="comment">// STL support</span>
-<a name="l00154"></a>00154             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00155"></a>00155             <span class="keyword">typedef</span> Value value_type;
-<a name="l00156"></a>00156             <span class="keyword">typedef</span> Value* pointer;
-<a name="l00157"></a>00157             <span class="keyword">typedef</span> Value& reference;
-<a name="l00158"></a>00158             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00159"></a>00159         };
-<a name="l00160"></a>00160         
-<a name="l00161"></a>00161         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00162"></a>00162         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
-<a name="l00163"></a>00163                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
-<a name="l00164"></a>00164             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166         
-<a name="l00167"></a>00167         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00168"></a>00168         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00169"></a>00169                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00170"></a>00170             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
-<a name="l00171"></a>00171         }
-<a name="l00172"></a>00172         
-<a name="l00173"></a>00173         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00174"></a>00174         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00175"></a>00175                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00176"></a>00176             <span class="keywordflow">return</span> !(i==j);
-<a name="l00177"></a>00177         }
-<a name="l00178"></a>00178         
-<a name="l00179"></a>00179         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00180"></a>00180         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00181"></a>00181                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00182"></a>00182             <span class="keywordflow">return</span> i.my_index<j.my_index;
-<a name="l00183"></a>00183         }
-<a name="l00184"></a>00184         
-<a name="l00185"></a>00185         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00186"></a>00186         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00187"></a>00187                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00188"></a>00188             <span class="keywordflow">return</span> j<i;
-<a name="l00189"></a>00189         }
-<a name="l00190"></a>00190         
-<a name="l00191"></a>00191         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00192"></a>00192         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00193"></a>00193                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00194"></a>00194             <span class="keywordflow">return</span> !(i<j);
-<a name="l00195"></a>00195         }
-<a name="l00196"></a>00196         
-<a name="l00197"></a>00197         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00198"></a>00198         <span class="keywordtype">bool</span> operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00199"></a>00199                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00200"></a>00200             <span class="keywordflow">return</span> !(j<i);
-<a name="l00201"></a>00201         }
-<a name="l00202"></a>00202         
-<a name="l00203"></a>00203         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00204"></a>00204         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00205"></a>00205                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00206"></a>00206             <span class="keywordflow">return</span> i.my_index-j.my_index;
-<a name="l00207"></a>00207         }
+<a name="l00024"></a>00024 <span class="preprocessor">#include "_concurrent_queue_internal.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 
+<a name="l00034"></a>00034 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> A = cache_aligned_allocator<T> > 
+<a name="l00035"></a><a class="code" href="a00139.html">00035</a> <span class="keyword">class </span><a class="code" href="a00139.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3<T> {
+<a name="l00036"></a>00036     <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>internal::concurrent_queue_iterator;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
+<a name="l00040"></a>00040     page_allocator_type my_allocator;
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) {
+<a name="l00044"></a>00044         <span class="keywordtype">void</span> *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
+<a name="l00045"></a>00045         <span class="keywordflow">if</span>( !b )
+<a name="l00046"></a>00046             internal::throw_exception(internal::eid_bad_alloc); 
+<a name="l00047"></a>00047         <span class="keywordflow">return</span> b;
+<a name="l00048"></a>00048     }
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *b, size_t n ) {
+<a name="l00052"></a>00052         my_allocator.deallocate( reinterpret_cast<char*>(b), n );
+<a name="l00053"></a>00053     }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="keyword">public</span>:
+<a name="l00057"></a><a class="code" href="a00139.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00139.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
+<a name="l00064"></a>00064 
+<a name="l00066"></a><a class="code" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
+<a name="l00067"></a>00067 
+<a name="l00069"></a><a class="code" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
+<a name="l00070"></a>00070 
+<a name="l00072"></a><a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
+<a name="l00073"></a>00073 
+<a name="l00075"></a><a class="code" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
+<a name="l00076"></a>00076         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+<a name="l00077"></a>00077     {
+<a name="l00078"></a>00078     }
+<a name="l00079"></a>00079 
+<a name="l00081"></a>00081     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00082"></a><a class="code" href="a00139.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) :
+<a name="l00083"></a>00083         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+<a name="l00084"></a>00084     {
+<a name="l00085"></a>00085         <span class="keywordflow">for</span>( ; begin != end; ++begin )
+<a name="l00086"></a>00086             internal_push(&*begin);
+<a name="l00087"></a>00087     }
+<a name="l00088"></a>00088     
+<a name="l00090"></a><a class="code" href="a00139.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00139.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00139.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac" [...]
+<a name="l00091"></a>00091         internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+<a name="l00092"></a>00092     {
+<a name="l00093"></a>00093         assign( src );
+<a name="l00094"></a>00094     }
+<a name="l00095"></a>00095     
+<a name="l00097"></a>00097     <a class="code" href="a00139.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00101"></a>00101         internal_push( &source );
+<a name="l00102"></a>00102     }
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105 
+<a name="l00107"></a><a class="code" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T& result ) {
+<a name="l00108"></a>00108         <span class="keywordflow">return</span> internal_try_pop( &result );
+<a name="l00109"></a>00109     }
+<a name="l00110"></a>00110 
+<a name="l00112"></a><a class="code" href="a00139.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00139.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->internal_size();}
+<a name="l00113"></a>00113 
+<a name="l00115"></a><a class="code" href="a00139.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->internal_empty();}
+<a name="l00116"></a>00116 
+<a name="l00118"></a>00118     <span class="keywordtype">void</span> <a class="code" href="a00139.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
+<a name="l00119"></a>00119 
+<a name="l00121"></a><a class="code" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00139.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
+<a name="l00124"></a>00124     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00127"></a>00127     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00128"></a>00128     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00129"></a>00129     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+<a name="l00130"></a>00130     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
+<a name="l00131"></a>00131     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+<a name="l00132"></a>00132     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+<a name="l00133"></a>00133 } ;
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00136"></a><a class="code" href="a00139.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00139.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
+<a name="l00137"></a>00137     <a class="code" href="a00139.html#c32e8e84c0524155133b4aae32d2a827">clear</a>();
+<a name="l00138"></a>00138     this->internal_finish_clear();
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00142"></a><a class="code" href="a00139.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00139.html">concurrent_queue<T,A>::clear</a>() {
+<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00139.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() ) {
+<a name="l00144"></a>00144         T value;
+<a name="l00145"></a>00145         internal_try_pop(&value);
+<a name="l00146"></a>00146     }
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00150"></a>00150     
+<a name="l00152"></a>00152 
+<a name="l00157"></a>00157 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
+<a name="l00158"></a><a class="code" href="a00134.html">00158</a> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_bounded_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3 {
+<a name="l00159"></a>00159     <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>internal::concurrent_queue_iterator;
+<a name="l00160"></a>00160 
+<a name="l00162"></a>00162     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
+<a name="l00163"></a>00163     page_allocator_type my_allocator;
+<a name="l00164"></a>00164 
+<a name="l00166"></a>00166     <span class="keyword">class </span>destroyer: internal::no_copy {
+<a name="l00167"></a>00167         T& my_value;
+<a name="l00168"></a>00168     <span class="keyword">public</span>:
+<a name="l00169"></a>00169         destroyer( T& value ) : my_value(value) {}
+<a name="l00170"></a>00170         ~destroyer() {my_value.~T();}          
+<a name="l00171"></a>00171     };
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173     T& get_ref( page& page, size_t index ) {
+<a name="l00174"></a>00174         __TBB_ASSERT( index<items_per_page, NULL );
+<a name="l00175"></a>00175         <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
+<a name="l00176"></a>00176     }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178     <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 ) {
+<a name="l00179"></a>00179         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+<a name="l00180"></a>00180     }
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
+<a name="l00183"></a>00183         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+<a name="l00184"></a>00184     }
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186     <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 ) {
+<a name="l00187"></a>00187         T& from = get_ref(src,index);
+<a name="l00188"></a>00188         destroyer d(from);
+<a name="l00189"></a>00189         *static_cast<T*>(dst) = from;
+<a name="l00190"></a>00190     }
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00193"></a>00193         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+<a name="l00194"></a>00194         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
+<a name="l00195"></a>00195         <span class="keywordflow">if</span>( !p )
+<a name="l00196"></a>00196             internal::throw_exception(internal::eid_bad_alloc); 
+<a name="l00197"></a>00197         <span class="keywordflow">return</span> p;
+<a name="l00198"></a>00198     }
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
+<a name="l00201"></a>00201         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+<a name="l00202"></a>00202         my_allocator.deallocate( reinterpret_cast<char*>(p), n );
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205 <span class="keyword">public</span>:
+<a name="l00207"></a><a class="code" href="a00134.html#98245517a931e5893f6601e66c51fc75">00207</a>     <span class="keyword">typedef</span> T <a class="code" href="a00134.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
 <a name="l00208"></a>00208 
-<a name="l00209"></a>00209     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
-<a name="l00210"></a>00210         <span class="keyword">class </span>segmented_iterator
-<a name="l00211"></a>00211 #if defined(_WIN64) && defined(_MSC_VER)
-<a name="l00212"></a>00212         : public std::iterator<std::input_iterator_tag, Value>
-<a name="l00213"></a>00213 #endif
-<a name="l00214"></a>00214         {
-<a name="l00215"></a>00215             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00216"></a>00216             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> segmented_iterator<C,T>& i, <span class="keyword">const</span> segmented_iterator<C,U>& j);
+<a name="l00210"></a><a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">00210</a>     <span class="keyword">typedef</span> A <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
+<a name="l00211"></a>00211 
+<a name="l00213"></a><a class="code" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">00213</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
+<a name="l00214"></a>00214 
+<a name="l00216"></a><a class="code" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">00216</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
 <a name="l00217"></a>00217 
-<a name="l00218"></a>00218             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00219"></a>00219             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> segmented_iterator<C,T>& i, <span class="keyword">const</span> segmented_iterator<C,U>& j);
-<a name="l00220"></a>00220             
-<a name="l00221"></a>00221             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00222"></a>00222             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224             <span class="keyword">public</span>:
+<a name="l00219"></a>00219 
+<a name="l00221"></a><a class="code" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">00221</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
+<a name="l00222"></a>00222 
+<a name="l00224"></a><a class="code" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">00224</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
 <a name="l00225"></a>00225 
-<a name="l00226"></a>00226                 segmented_iterator() {my_segcont = NULL;}
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
-<a name="l00229"></a>00229                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
-<a name="l00230"></a>00230                     outer_iter(my_segcont->end()) { }
+<a name="l00227"></a><a class="code" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">00227</a>     <span class="keyword">explicit</span> <a class="code" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
+<a name="l00228"></a>00228         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00229"></a>00229     {
+<a name="l00230"></a>00230     }
 <a name="l00231"></a>00231 
-<a name="l00232"></a>00232                 ~segmented_iterator() {}
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
-<a name="l00235"></a>00235                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
-<a name="l00236"></a>00236                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238                 <span class="comment">// STL support</span>
-<a name="l00239"></a>00239                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00240"></a>00240                 <span class="keyword">typedef</span> Value value_type;
-<a name="l00241"></a>00241                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
-<a name="l00242"></a>00242                 <span class="keyword">typedef</span> Value* pointer;
-<a name="l00243"></a>00243                 <span class="keyword">typedef</span> Value& reference;
-<a name="l00244"></a>00244                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246                 <span class="comment">// Copy Constructor</span>
-<a name="l00247"></a>00247                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00248"></a>00248                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
-<a name="l00249"></a>00249                     my_segcont(other.my_segcont),
-<a name="l00250"></a>00250                     outer_iter(other.outer_iter),
-<a name="l00251"></a>00251                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
-<a name="l00252"></a>00252                     inner_iter(other.inner_iter)
-<a name="l00253"></a>00253                 {}
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255                 <span class="comment">// assignment</span>
-<a name="l00256"></a>00256                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00257"></a>00257                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
-<a name="l00258"></a>00258                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
-<a name="l00259"></a>00259                         my_segcont = other.my_segcont;
-<a name="l00260"></a>00260                         outer_iter = other.outer_iter;
-<a name="l00261"></a>00261                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
-<a name="l00262"></a>00262                     }
-<a name="l00263"></a>00263                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00264"></a>00264                 }
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
-<a name="l00267"></a>00267                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
-<a name="l00268"></a>00268                 <span class="comment">// the end of the outer container is reached.</span>
-<a name="l00269"></a>00269                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
-<a name="l00270"></a>00270                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00271"></a>00271                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
-<a name="l00272"></a>00272                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
-<a name="l00273"></a>00273                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
-<a name="l00274"></a>00274                             inner_iter = outer_iter->begin();
-<a name="l00275"></a>00275                             <span class="keywordflow">break</span>;
-<a name="l00276"></a>00276                         }
-<a name="l00277"></a>00277                     }
-<a name="l00278"></a>00278                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00279"></a>00279                 }
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281                 <span class="comment">// pre-increment</span>
-<a name="l00282"></a>00282                 segmented_iterator& operator++() {
-<a name="l00283"></a>00283                     advance_me();
-<a name="l00284"></a>00284                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00285"></a>00285                 }
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287                 <span class="comment">// post-increment</span>
-<a name="l00288"></a>00288                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00289"></a>00289                     segmented_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00290"></a>00290                     operator++();
-<a name="l00291"></a>00291                     <span class="keywordflow">return</span> tmp;
-<a name="l00292"></a>00292                 }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00295"></a>00295                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00296"></a>00296                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
-<a name="l00297"></a>00297                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
-<a name="l00298"></a>00298                 }
+<a name="l00233"></a><a class="code" href="a00134.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00233</a>     <a class="code" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00134.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00134.html#2e2726fccf6d975dc [...]
+<a name="l00234"></a>00234         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00235"></a>00235     {
+<a name="l00236"></a>00236         assign( src );
+<a name="l00237"></a>00237     }
+<a name="l00238"></a>00238 
+<a name="l00240"></a>00240     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00241"></a><a class="code" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">00241</a>     <a class="code" href="a00134.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) :
+<a name="l00242"></a>00242         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00243"></a>00243     {
+<a name="l00244"></a>00244         <span class="keywordflow">for</span>( ; begin != end; ++begin )
+<a name="l00245"></a>00245             internal_push_if_not_full(&*begin);
+<a name="l00246"></a>00246     }
+<a name="l00247"></a>00247 
+<a name="l00249"></a>00249     <a class="code" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
+<a name="l00250"></a>00250 
+<a name="l00252"></a><a class="code" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">00252</a>     <span class="keywordtype">void</span> <a class="code" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">push</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00253"></a>00253         internal_push( &source );
+<a name="l00254"></a>00254     }
+<a name="l00255"></a>00255 
+<a name="l00257"></a>00257 
+<a name="l00258"></a><a class="code" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">00258</a>     <span class="keywordtype">void</span> <a class="code" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>( T& destination ) {
+<a name="l00259"></a>00259         internal_pop( &destination );
+<a name="l00260"></a>00260     }
+<a name="l00261"></a>00261 
+<a name="l00263"></a>00263 
+<a name="l00265"></a><a class="code" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">00265</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00266"></a>00266         <span class="keywordflow">return</span> internal_push_if_not_full( &source );
+<a name="l00267"></a>00267     }
+<a name="l00268"></a>00268 
+<a name="l00270"></a>00270 
+<a name="l00272"></a><a class="code" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">00272</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( T& destination ) {
+<a name="l00273"></a>00273         <span class="keywordflow">return</span> internal_pop_if_present( &destination );
+<a name="l00274"></a>00274     }
+<a name="l00275"></a>00275 
+<a name="l00277"></a>00277 
+<a name="l00280"></a><a class="code" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">00280</a>     <a class="code" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
+<a name="l00281"></a>00281 
+<a name="l00283"></a><a class="code" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">00283</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_empty();}
+<a name="l00284"></a>00284 
+<a name="l00286"></a><a class="code" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">00286</a>     <a class="code" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>()<span class="keyword"> const </span>{
+<a name="l00287"></a>00287         <span class="keywordflow">return</span> my_capacity;
+<a name="l00288"></a>00288     }
+<a name="l00289"></a>00289 
+<a name="l00291"></a>00291 
+<a name="l00293"></a><a class="code" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">00293</a>     <span class="keywordtype">void</span> <a class="code" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>( <a class="code" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> ) {
+<a name="l00294"></a>00294         internal_set_capacity( capacity, <span class="keyword">sizeof</span>(T) );
+<a name="l00295"></a>00295     }
+<a name="l00296"></a>00296 
+<a name="l00298"></a><a class="code" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">00298</a>     <a class="code" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
 <a name="l00299"></a>00299 
-<a name="l00300"></a>00300                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00301"></a>00301                     <span class="keywordflow">return</span> !operator==(other_outer);
+<a name="l00301"></a>00301     <span class="keywordtype">void</span> <a class="code" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>() ;
 <a name="l00302"></a>00302 
-<a name="l00303"></a>00303                 }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305                 <span class="comment">// (i)* RHS</span>
-<a name="l00306"></a>00306                 reference operator*()<span class="keyword"> const </span>{
-<a name="l00307"></a>00307                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00308"></a>00308                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
-<a name="l00309"></a>00309                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
-<a name="l00310"></a>00310                     <span class="keywordflow">return</span> *inner_iter;
-<a name="l00311"></a>00311                 }
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313                 <span class="comment">// i-></span>
-<a name="l00314"></a>00314                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
+<a name="l00303"></a>00303     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;
+<a name="l00304"></a>00304     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00307"></a>00307     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00308"></a>00308     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00309"></a>00309     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+<a name="l00310"></a>00310     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
+<a name="l00311"></a>00311     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+<a name="l00312"></a>00312     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 }; 
 <a name="l00315"></a>00315 
-<a name="l00316"></a>00316             <span class="keyword">private</span>:
-<a name="l00317"></a>00317                 SegmentedContainer*             my_segcont;
-<a name="l00318"></a>00318                 outer_iterator outer_iter;
-<a name="l00319"></a>00319                 inner_iterator inner_iter;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321                 <span class="keywordtype">void</span> advance_me() {
-<a name="l00322"></a>00322                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00323"></a>00323                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
-<a name="l00324"></a>00324                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
-<a name="l00325"></a>00325                     ++inner_iter;
-<a name="l00326"></a>00326                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
-<a name="l00327"></a>00327                         inner_iter = outer_iter->begin();
-<a name="l00328"></a>00328                     }
-<a name="l00329"></a>00329                 }
-<a name="l00330"></a>00330         };    <span class="comment">// segmented_iterator</span>
+<a name="l00316"></a>00316 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00317"></a><a class="code" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">00317</a> <a class="code" href="a00134.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
+<a name="l00318"></a>00318     <a class="code" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>();
+<a name="l00319"></a>00319     internal_finish_clear();
+<a name="l00320"></a>00320 }
+<a name="l00321"></a>00321 
+<a name="l00322"></a>00322 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00323"></a><a class="code" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">00323</a> <span class="keywordtype">void</span> <a class="code" href="a00134.html">concurrent_bounded_queue<T,A>::clear</a>() {
+<a name="l00324"></a>00324     <span class="keywordflow">while</span>( !<a class="code" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() ) {
+<a name="l00325"></a>00325         T value;
+<a name="l00326"></a>00326         internal_pop_if_present(&value);
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328 }
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330 <span class="keyword">namespace </span>deprecated {
 <a name="l00331"></a>00331 
-<a name="l00332"></a>00332         <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00333"></a>00333         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00334"></a>00334                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00335"></a>00335             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00336"></a>00336             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00337"></a>00337             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00338"></a>00338             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00339"></a>00339             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
-<a name="l00340"></a>00340         }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342         <span class="comment">// !=</span>
-<a name="l00343"></a>00343         <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00344"></a>00344         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00345"></a>00345                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00346"></a>00346             <span class="keywordflow">return</span> !(i==j);
-<a name="l00347"></a>00347         }
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349         <span class="comment">// empty template for following specializations</span>
-<a name="l00350"></a>00350         <span class="keyword">template</span><ets_key_usage_type et>
-<a name="l00351"></a>00351         <span class="keyword">struct </span>tls_manager {};
-<a name="l00352"></a>00352         
-<a name="l00354"></a>00354         <span class="keyword">template</span> <>
-<a name="l00355"></a>00355         <span class="keyword">struct </span>tls_manager<ets_no_key> {
-<a name="l00356"></a>00356             <span class="keyword">typedef</span> size_t tls_key_t;
-<a name="l00357"></a>00357             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &) { }
-<a name="l00358"></a>00358             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t & ) { }
-<a name="l00359"></a>00359             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &, <span class="keywordtype">void</span> *  ) { }
-<a name="l00360"></a>00360             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t & ) { <span class="keywordflow">return</span> (size_t)0; }
-<a name="l00361"></a>00361         };
-<a name="l00362"></a>00362 
-<a name="l00364"></a>00364         <span class="keyword">template</span> <>
-<a name="l00365"></a>00365         <span class="keyword">struct </span>tls_manager <ets_key_per_instance> {
-<a name="l00366"></a>00366 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00367"></a>00367 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
-<a name="l00368"></a>00368             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &k) { k = TlsAlloc(); }
-<a name="l00369"></a>00369             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t &k) { TlsFree(k); }
-<a name="l00370"></a>00370             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &k, <span class="keywordtype">void</span> * value) { TlsSetValue(k, (LPVOID)value); }
-<a name="l00371"></a>00371             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t &k ) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(k); }
-<a name="l00372"></a>00372 <span class="preprocessor">#else</span>
-<a name="l00373"></a>00373 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
-<a name="l00374"></a>00374             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &k) { pthread_key_create(&k, NULL); }
-<a name="l00375"></a>00375             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t &k) { pthread_key_delete(k); }
-<a name="l00376"></a>00376             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &k, <span class="keywordtype">void</span> * value) { pthread_setspecific(k, value); }
-<a name="l00377"></a>00377             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t &k ) { <span class="keywordflow">return</span> pthread_getspecific(k); }
-<a name="l00378"></a>00378 <span class="preprocessor">#endif</span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span>        };
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381         <span class="keyword">class </span>thread_hash_compare {
-<a name="l00382"></a>00382         <span class="keyword">public</span>:
-<a name="l00383"></a>00383             <span class="comment">// using hack suggested by Arch to get value for thread id for hashing...</span>
-<a name="l00384"></a>00384 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00385"></a>00385 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD thread_key;
-<a name="l00386"></a>00386 <span class="preprocessor">#else</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t thread_key;
-<a name="l00388"></a>00388 <span class="preprocessor">#endif</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>            <span class="keyword">static</span> thread_key my_thread_key(<span class="keyword">const</span> tbb_thread::id j) {
-<a name="l00390"></a>00390                 thread_key key_val;
-<a name="l00391"></a>00391                 memcpy(&key_val, &j, <span class="keyword">sizeof</span>(thread_key));
-<a name="l00392"></a>00392                 <span class="keywordflow">return</span> key_val;
-<a name="l00393"></a>00393             }
+<a name="l00333"></a>00333 
+<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> > 
+<a name="l00339"></a><a class="code" href="a00140.html">00339</a> <span class="keyword">class </span><a class="code" href="a00140.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00134.html">concurrent_bounded_queue</a><T,A> {
+<a name="l00340"></a>00340 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span>    <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>internal::concurrent_queue_iterator;
+<a name="l00342"></a>00342 <span class="preprocessor">#endif </span>
+<a name="l00343"></a>00343 <span class="preprocessor"></span>
+<a name="l00344"></a>00344 <span class="keyword">public</span>:
+<a name="l00346"></a><a class="code" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">00346</a>     <span class="keyword">explicit</span> <a class="code" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
+<a name="l00347"></a>00347         <a class="code" href="a00134.html">concurrent_bounded_queue</a><T,A>( a )
+<a name="l00348"></a>00348     {
+<a name="l00349"></a>00349     }
+<a name="l00350"></a>00350 
+<a name="l00352"></a><a class="code" href="a00140.html#fc092b9082f233482f3513fc3bb670f7">00352</a>     <a class="code" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00140.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
+<a name="l00353"></a>00353         <a class="code" href="a00134.html">concurrent_bounded_queue</a><T,A>( src, a )
+<a name="l00354"></a>00354     {
+<a name="l00355"></a>00355     }
+<a name="l00356"></a>00356 
+<a name="l00358"></a>00358     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00359"></a><a class="code" href="a00140.html#383187b910f8c3ca27a39c1638566f15">00359</a>     <a class="code" href="a00140.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> A& a = A()) :
+<a name="l00360"></a>00360         <a class="code" href="a00134.html">concurrent_bounded_queue</a><T,A>( begin, end, a )
+<a name="l00361"></a>00361     {
+<a name="l00362"></a>00362     }
+<a name="l00363"></a>00363 
+<a name="l00365"></a>00365 
+<a name="l00367"></a><a class="code" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">00367</a>     <span class="keywordtype">bool</span> <a class="code" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00368"></a>00368         <span class="keywordflow">return</span> <a class="code" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( source );
+<a name="l00369"></a>00369     }
+<a name="l00370"></a>00370 
+<a name="l00372"></a>00372 
+<a name="l00376"></a><a class="code" href="a00140.html#48da3536245318af6cb5fd58bac78039">00376</a>     <span class="keywordtype">bool</span> <a class="code" href="a00140.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
+<a name="l00377"></a>00377         <span class="keywordflow">return</span> <a class="code" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( destination );
+<a name="l00378"></a>00378     }
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00134.html">concurrent_bounded_queue<T,A>::iterator</a> iterator;
+<a name="l00381"></a>00381     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00134.html">concurrent_bounded_queue<T,A>::const_iterator</a> const_iterator;
+<a name="l00382"></a>00382     <span class="comment">//</span>
+<a name="l00383"></a>00383     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00384"></a>00384     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00385"></a>00385     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00386"></a>00386     iterator begin() {<span class="keywordflow">return</span> this->unsafe_begin();}
+<a name="l00387"></a>00387     iterator end() {<span class="keywordflow">return</span> this->unsafe_end();}
+<a name="l00388"></a>00388     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_begin();}
+<a name="l00389"></a>00389     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_end();}
+<a name="l00390"></a>00390 }; 
+<a name="l00391"></a>00391 
+<a name="l00392"></a>00392 }
+<a name="l00393"></a>00393     
 <a name="l00394"></a>00394 
-<a name="l00395"></a>00395             <span class="keywordtype">bool</span> equal( <span class="keyword">const</span> thread_key j, <span class="keyword">const</span> thread_key k)<span class="keyword"> const </span>{
-<a name="l00396"></a>00396                 <span class="keywordflow">return</span> j == k;
-<a name="l00397"></a>00397             }
-<a name="l00398"></a>00398             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> hash(<span class="keyword">const</span> thread_key k)<span class="keyword"> const </span>{
-<a name="l00399"></a>00399                 <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)k;
-<a name="l00400"></a>00400             }
-<a name="l00401"></a>00401         };
+<a name="l00395"></a>00395 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="keyword">using</span> deprecated::concurrent_queue;
+<a name="l00397"></a>00397 <span class="preprocessor">#else</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="keyword">using</span> strict_ppl::concurrent_queue;    
+<a name="l00399"></a>00399 <span class="preprocessor">#endif</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span>
+<a name="l00401"></a>00401 } <span class="comment">// namespace tbb</span>
 <a name="l00402"></a>00402 
-<a name="l00403"></a>00403         <span class="comment">// storage for initialization function pointer</span>
-<a name="l00404"></a>00404         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00405"></a>00405         <span class="keyword">struct </span>callback_base {
-<a name="l00406"></a>00406             <span class="keyword">virtual</span> T apply( ) = 0;
-<a name="l00407"></a>00407             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy( ) = 0;
-<a name="l00408"></a>00408             <span class="comment">// need to be able to create copies of callback_base for copy constructor</span>
-<a name="l00409"></a>00409             <span class="keyword">virtual</span> callback_base* make_copy() = 0;
-<a name="l00410"></a>00410             <span class="comment">// need virtual destructor to satisfy GCC compiler warning</span>
-<a name="l00411"></a>00411             <span class="keyword">virtual</span> ~callback_base() { }
-<a name="l00412"></a>00412         };
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Functor>
-<a name="l00415"></a>00415         <span class="keyword">struct </span>callback_leaf : <span class="keyword">public</span> callback_base<T> {
-<a name="l00416"></a>00416             <span class="keyword">typedef</span> Functor my_callback_type;
-<a name="l00417"></a>00417             <span class="keyword">typedef</span> callback_leaf<T,Functor> my_type;
-<a name="l00418"></a>00418             <span class="keyword">typedef</span> my_type* callback_pointer;
-<a name="l00419"></a>00419             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator<my_type></a> my_allocator_type;
-<a name="l00420"></a>00420             Functor f;
-<a name="l00421"></a>00421             callback_leaf( <span class="keyword">const</span> Functor& f_) : f(f_) {
-<a name="l00422"></a>00422             }
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424             <span class="keyword">static</span> callback_pointer new_callback(<span class="keyword">const</span> Functor& f_ ) {
-<a name="l00425"></a>00425                 <span class="keywordtype">void</span>* new_void = my_allocator_type().allocate(1);
-<a name="l00426"></a>00426                 callback_pointer new_cb = <span class="keyword">new</span> (new_void) callback_leaf<T,Functor>(f_); <span class="comment">// placement new</span>
-<a name="l00427"></a>00427                 <span class="keywordflow">return</span> new_cb;
-<a name="l00428"></a>00428             }
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430             <span class="comment">/* override */</span> callback_pointer make_copy() {
-<a name="l00431"></a>00431                 <span class="keywordflow">return</span> new_callback( f );
-<a name="l00432"></a>00432             }
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434              <span class="comment">/* override */</span> <span class="keywordtype">void</span> destroy( ) {
-<a name="l00435"></a>00435                  callback_pointer my_ptr = <span class="keyword">this</span>;
-<a name="l00436"></a>00436                  my_allocator_type().destroy(my_ptr);
-<a name="l00437"></a>00437                  my_allocator_type().deallocate(my_ptr,1);
-<a name="l00438"></a>00438              }
-<a name="l00439"></a>00439             <span class="comment">/* override */</span> T apply() { <span class="keywordflow">return</span> f(); }  <span class="comment">// does copy construction of returned value.</span>
-<a name="l00440"></a>00440         };
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442         <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HC, <span class="keyword">typename</span> A>
-<a name="l00443"></a>00443         <span class="keyword">class </span>ets_concurrent_hash_map : <span class="keyword">public</span> tbb::concurrent_hash_map<Key, T, HC, A> {
-<a name="l00444"></a>00444         <span class="keyword">public</span>:
-<a name="l00445"></a>00445             <span class="keyword">typedef</span> <a class="code" href="a00130.html">tbb::concurrent_hash_map<Key, T, HC, A></a> base_type;
-<a name="l00446"></a>00446             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
-<a name="l00447"></a>00447             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::key_type key_type;
-<a name="l00448"></a>00448             const_pointer find( <span class="keyword">const</span> key_type &k ) {
-<a name="l00449"></a>00449                 <span class="keywordflow">return</span> internal_fast_find( k );
-<a name="l00450"></a>00450             } <span class="comment">// make public</span>
-<a name="l00451"></a>00451         };
-<a name="l00452"></a>00452     
-<a name="l00453"></a>00453     } <span class="comment">// namespace internal</span>
-<a name="l00455"></a>00455 <span class="comment"></span>
-<a name="l00457"></a>00457     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
-<a name="l00458"></a>00458               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
-<a name="l00459"></a><a class="code" href="a00138.html">00459</a>               <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
-<a name="l00460"></a>00460     <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a> { 
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A, ets_key_usage_type C> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a>;
-<a name="l00463"></a>00463     
-<a name="l00464"></a>00464         <span class="keyword">typedef</span> internal::tls_manager< ETS_key_type > my_tls_manager;
-<a name="l00465"></a>00465 
-<a name="l00467"></a>00467         <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00468"></a>00468         <span class="keyword">struct </span>padded_element {
-<a name="l00469"></a>00469             U value;
-<a name="l00470"></a>00470             <span class="keywordtype">char</span> padding[ ( (<span class="keyword">sizeof</span>(U) - 1) / internal::NFS_MaxLineSize + 1 ) * internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(U) ];
-<a name="l00471"></a>00471             padded_element(<span class="keyword">const</span> U &v) : value(v) {}
-<a name="l00472"></a>00472             padded_element() {}
-<a name="l00473"></a>00473         };
-<a name="l00474"></a>00474     
-<a name="l00476"></a>00476         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00477"></a>00477         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00122.html">blocked_range</a><I> {
-<a name="l00478"></a>00478         <span class="keyword">public</span>:
-<a name="l00479"></a>00479             <span class="keyword">typedef</span> T value_type;
-<a name="l00480"></a>00480             <span class="keyword">typedef</span> T& reference;
-<a name="l00481"></a>00481             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00482"></a>00482             <span class="keyword">typedef</span> I iterator;
-<a name="l00483"></a>00483             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00484"></a>00484             generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00122.html">blocked_range<I></a>(begin_,end_,grainsize) {} 
-<a name="l00485"></a>00485             template<typename U>
-<a name="l00486"></a>00486             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00122.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00487"></a>00487             generic_range_type( generic_range_type& r, <a class="code" href="a00165.html">split</a> ) : <a class="code" href="a00122.html">blocked_range<I></a>(r,<a class="code" href="a00165.html">split</a>()) {}
-<a name="l00488"></a>00488         };
-<a name="l00489"></a>00489     
-<a name="l00490"></a>00490         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element<T> >::other padded_allocator_type;
-<a name="l00491"></a>00491         <span class="keyword">typedef</span> <a class="code" href="a00136.html">tbb::concurrent_vector< padded_element<T></a>, padded_allocator_type > <a class="code" href="a00136.html">internal_collection_type</a>;
-<a name="l00492"></a>00492         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type hash_table_index_type; <span class="comment">// storing array indices rather than iterators to simplify</span>
-<a name="l00493"></a>00493         <span class="comment">// copying the hash table that correlates thread IDs with concurrent vector elements.</span>
-<a name="l00494"></a>00494         
-<a name="l00495"></a>00495         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< std::pair< typename internal::thread_hash_compare::thread_key, hash_table_index_type > >::other hash_element_allocator;
-<a name="l00496"></a>00496         <span class="keyword">typedef</span> internal::ets_concurrent_hash_map< typename internal::thread_hash_compare::thread_key, hash_table_index_type, internal::thread_hash_compare, hash_element_allocator > thread_to_index_type;
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498         <span class="keyword">typename</span> my_tls_manager::tls_key_t my_key;
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500         <span class="keywordtype">void</span> reset_key() {
-<a name="l00501"></a>00501             my_tls_manager::destroy_key(my_key);
-<a name="l00502"></a>00502             my_tls_manager::create_key(my_key); 
-<a name="l00503"></a>00503         }
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505         internal::callback_base<T> *my_finit_callback;
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507         <span class="comment">// need to use a pointed-to exemplar because T may not be assignable.</span>
-<a name="l00508"></a>00508         <span class="comment">// using tbb_allocator instead of padded_element_allocator because we may be</span>
-<a name="l00509"></a>00509         <span class="comment">// copying an exemplar from one instantiation of ETS to another with a different</span>
-<a name="l00510"></a>00510         <span class="comment">// allocator.</span>
-<a name="l00511"></a>00511         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator<padded_element<T></a> > <a class="code" href="a00170.html">exemplar_allocator_type</a>;
-<a name="l00512"></a>00512         <span class="keyword">static</span> padded_element<T> * create_exemplar(<span class="keyword">const</span> T& my_value) {
-<a name="l00513"></a>00513             padded_element<T> *new_exemplar = 0;
-<a name="l00514"></a>00514             <span class="comment">// void *new_space = padded_allocator_type().allocate(1);</span>
-<a name="l00515"></a>00515             <span class="keywordtype">void</span> *new_space = exemplar_allocator_type().allocate(1);
-<a name="l00516"></a>00516             new_exemplar = <span class="keyword">new</span>(new_space) padded_element<T>(my_value);
-<a name="l00517"></a>00517             <span class="keywordflow">return</span> new_exemplar;
-<a name="l00518"></a>00518         }
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520         <span class="keyword">static</span> padded_element<T> *create_exemplar( ) {
-<a name="l00521"></a>00521             <span class="comment">// void *new_space = padded_allocator_type().allocate(1);</span>
-<a name="l00522"></a>00522             <span class="keywordtype">void</span> *new_space = exemplar_allocator_type().allocate(1);
-<a name="l00523"></a>00523             padded_element<T> *new_exemplar = <span class="keyword">new</span>(new_space) padded_element<T>( );
-<a name="l00524"></a>00524             <span class="keywordflow">return</span> new_exemplar;
-<a name="l00525"></a>00525         }
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527         <span class="keyword">static</span> <span class="keywordtype">void</span> free_exemplar(padded_element<T> *my_ptr) {
-<a name="l00528"></a>00528             <span class="comment">// padded_allocator_type().destroy(my_ptr);</span>
-<a name="l00529"></a>00529             <span class="comment">// padded_allocator_type().deallocate(my_ptr,1);</span>
-<a name="l00530"></a>00530             exemplar_allocator_type().destroy(my_ptr);
-<a name="l00531"></a>00531             exemplar_allocator_type().deallocate(my_ptr,1);
-<a name="l00532"></a>00532         }
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534         padded_element<T>* my_exemplar_ptr;
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536         internal_collection_type my_locals;
-<a name="l00537"></a>00537         thread_to_index_type my_hash_tbl;
-<a name="l00538"></a>00538     
-<a name="l00539"></a>00539     <span class="keyword">public</span>:
-<a name="l00540"></a>00540     
-<a name="l00542"></a>00542         <span class="keyword">typedef</span> Allocator <a class="code" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a>;
-<a name="l00543"></a>00543         <span class="keyword">typedef</span> T value_type;
-<a name="l00544"></a>00544         <span class="keyword">typedef</span> T& reference;
-<a name="l00545"></a>00545         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00546"></a>00546         <span class="keyword">typedef</span> T* pointer;
-<a name="l00547"></a>00547         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-<a name="l00548"></a>00548         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
-<a name="l00549"></a>00549         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
-<a name="l00550"></a>00550     
-<a name="l00551"></a>00551         <span class="comment">// Iterator types</span>
-<a name="l00552"></a>00552         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
-<a name="l00553"></a>00553         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, const value_type > const_iterator;
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555         <span class="comment">// Parallel range types</span>
-<a name="l00556"></a>00556         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
-<a name="l00557"></a>00557         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
-<a name="l00558"></a>00558     
-<a name="l00560"></a>00560         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>() : my_finit_callback(0) { 
-<a name="l00561"></a>00561             my_exemplar_ptr = create_exemplar();
-<a name="l00562"></a>00562             my_tls_manager::create_key(my_key); 
-<a name="l00563"></a>00563         }
-<a name="l00564"></a>00564 
-<a name="l00566"></a>00566         <span class="comment">// Finit should be a function taking 0 parameters and returning a T</span>
-<a name="l00567"></a><a class="code" href="a00138.html#e5698930b84c098bb6d87175b8b50306">00567</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
-<a name="l00568"></a>00568         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( Finit _finit )
-<a name="l00569"></a>00569         {
-<a name="l00570"></a>00570             my_finit_callback = internal::callback_leaf<T,Finit>::new_callback( _finit );
-<a name="l00571"></a>00571             my_tls_manager::create_key(my_key);
-<a name="l00572"></a>00572             my_exemplar_ptr = 0; <span class="comment">// don't need exemplar if function is provided</span>
-<a name="l00573"></a>00573         }
-<a name="l00574"></a>00574     
-<a name="l00576"></a>00576         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>(<span class="keyword">const</span> T &_exemplar) : my_finit_callback(0) {
-<a name="l00577"></a>00577             my_exemplar_ptr = create_exemplar(_exemplar);
-<a name="l00578"></a>00578             my_tls_manager::create_key(my_key); 
-<a name="l00579"></a>00579         }
-<a name="l00580"></a>00580     
-<a name="l00582"></a>00582         <a class="code" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>() { 
-<a name="l00583"></a>00583             my_tls_manager::destroy_key(my_key); 
-<a name="l00584"></a>00584             <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00585"></a>00585                 my_finit_callback->destroy();
-<a name="l00586"></a>00586             }
-<a name="l00587"></a>00587             <span class="keywordflow">if</span>(my_exemplar_ptr)
-<a name="l00588"></a>00588             {
-<a name="l00589"></a>00589                 free_exemplar(my_exemplar_ptr);
-<a name="l00590"></a>00590             }
-<a name="l00591"></a>00591         }
-<a name="l00592"></a>00592       
-<a name="l00594"></a>00594         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>() {
-<a name="l00595"></a>00595             <span class="keywordtype">bool</span> exists;
-<a name="l00596"></a>00596             <span class="keywordflow">return</span> <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(exists);
-<a name="l00597"></a>00597         }
-<a name="l00598"></a>00598 
-<a name="l00600"></a>00600         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(<span class="keywordtype">bool</span>& exists)  {
-<a name="l00601"></a>00601             <span class="keywordflow">if</span> ( pointer local_ptr = static_cast<pointer>(my_tls_manager::get_tls(my_key)) ) {
-<a name="l00602"></a>00602                 exists = <span class="keyword">true</span>;
-<a name="l00603"></a>00603                <span class="keywordflow">return</span> *local_ptr;
-<a name="l00604"></a>00604             }
-<a name="l00605"></a>00605             hash_table_index_type local_index;
-<a name="l00606"></a>00606             <span class="keyword">typename</span> internal::thread_hash_compare::thread_key my_t_key = internal::thread_hash_compare::my_thread_key(tbb::this_tbb_thread::get_id());
-<a name="l00607"></a>00607             {
-<a name="l00608"></a>00608                 <span class="keyword">typename</span> thread_to_index_type::const_pointer my_existing_entry;
-<a name="l00609"></a>00609                 my_existing_entry = my_hash_tbl.find(my_t_key);
-<a name="l00610"></a>00610                 <span class="keywordflow">if</span>(my_existing_entry) {
-<a name="l00611"></a>00611                     exists = <span class="keyword">true</span>;
-<a name="l00612"></a>00612                     local_index = my_existing_entry->second;
-<a name="l00613"></a>00613                 }
-<a name="l00614"></a>00614                 <span class="keywordflow">else</span> {
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616                     <span class="comment">// see if the table entry can be found by accessor</span>
-<a name="l00617"></a>00617                     <span class="keyword">typename</span> thread_to_index_type::accessor a;
-<a name="l00618"></a>00618                     <span class="keywordflow">if</span>(!my_hash_tbl.insert(a, my_t_key)) {
-<a name="l00619"></a>00619                         exists = <span class="keyword">true</span>;
-<a name="l00620"></a>00620                         local_index = a->second;
-<a name="l00621"></a>00621                     }
-<a name="l00622"></a>00622                     <span class="keywordflow">else</span> {
-<a name="l00623"></a>00623                         <span class="comment">// create new entry</span>
-<a name="l00624"></a>00624                         exists = <span class="keyword">false</span>;
-<a name="l00625"></a>00625                         <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00626"></a>00626                             <span class="comment">// convert iterator to array index</span>
-<a name="l00627"></a>00627 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00628"></a>00628 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply());
-<a name="l00629"></a>00629 <span class="preprocessor">#else</span>
-<a name="l00630"></a>00630 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply()) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
-<a name="l00631"></a>00631 <span class="preprocessor">#endif</span>
-<a name="l00632"></a>00632 <span class="preprocessor"></span>                        }
-<a name="l00633"></a>00633                         <span class="keywordflow">else</span> {
-<a name="l00634"></a>00634                             <span class="comment">// convert iterator to array index</span>
-<a name="l00635"></a>00635 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00636"></a>00636 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr);
-<a name="l00637"></a>00637 <span class="preprocessor">#else</span>
-<a name="l00638"></a>00638 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
-<a name="l00639"></a>00639 <span class="preprocessor">#endif</span>
-<a name="l00640"></a>00640 <span class="preprocessor"></span>                        }
-<a name="l00641"></a>00641                         <span class="comment">// insert into hash table</span>
-<a name="l00642"></a>00642                         a->second = local_index;
-<a name="l00643"></a>00643                     }
-<a name="l00644"></a>00644                 }
-<a name="l00645"></a>00645             }
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647             reference local_ref = (my_locals[local_index].value);
-<a name="l00648"></a>00648             my_tls_manager::set_tls( my_key, static_cast<void *>(&local_ref) );
-<a name="l00649"></a>00649             <span class="keywordflow">return</span> local_ref;
-<a name="l00650"></a>00650         } <span class="comment">// local</span>
-<a name="l00651"></a>00651 
-<a name="l00653"></a>00653         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
-<a name="l00654"></a>00654     
-<a name="l00656"></a>00656         <span class="keywordtype">bool</span> <a class="code" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
-<a name="l00657"></a>00657     
-<a name="l00659"></a>00659         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
-<a name="l00661"></a>00661         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
-<a name="l00662"></a>00662     
-<a name="l00664"></a>00664         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
-<a name="l00665"></a>00665     
-<a name="l00667"></a>00667         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
-<a name="l00668"></a>00668 
-<a name="l00670"></a>00670         range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); } 
-<a name="l00671"></a>00671         
-<a name="l00673"></a>00673         const_range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); }
-<a name="l00674"></a>00674     
-<a name="l00676"></a>00676         <span class="keywordtype">void</span> <a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>() {
-<a name="l00677"></a>00677             my_locals.<a class="code" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
-<a name="l00678"></a>00678             my_hash_tbl.clear();
-<a name="l00679"></a>00679             reset_key();
-<a name="l00680"></a>00680             <span class="comment">// callback is not destroyed</span>
-<a name="l00681"></a>00681             <span class="comment">// exemplar is not destroyed</span>
-<a name="l00682"></a>00682         }
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684         <span class="comment">// STL container methods</span>
-<a name="l00685"></a>00685         <span class="comment">// copy constructor</span>
-<a name="l00686"></a>00686 
-<a name="l00687"></a>00687     <span class="keyword">private</span>:
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00690"></a>00690         <span class="keywordtype">void</span>
-<a name="l00691"></a>00691         internal_copy_construct( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00692"></a>00692             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
-<a name="l00693"></a>00693             <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
-<a name="l00694"></a>00694                 my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
-<a name="l00695"></a>00695             }
-<a name="l00696"></a>00696             <span class="keywordflow">if</span>(other.my_finit_callback) {
-<a name="l00697"></a>00697                 my_finit_callback = other.my_finit_callback->make_copy();
-<a name="l00698"></a>00698             }
-<a name="l00699"></a>00699             <span class="keywordflow">else</span> {
-<a name="l00700"></a>00700                 my_finit_callback = 0;
-<a name="l00701"></a>00701             }
-<a name="l00702"></a>00702             <span class="keywordflow">if</span>(other.my_exemplar_ptr) {
-<a name="l00703"></a>00703                 my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr->value);
-<a name="l00704"></a>00704             }
-<a name="l00705"></a>00705             <span class="keywordflow">else</span> {
-<a name="l00706"></a>00706                 my_exemplar_ptr = 0;
-<a name="l00707"></a>00707             }
-<a name="l00708"></a>00708             my_tls_manager::create_key(my_key);
-<a name="l00709"></a>00709         }
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711     <span class="keyword">public</span>:
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00714"></a>00714         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : my_hash_tbl(other.my_hash_tbl) 
-<a name="l00715"></a>00715         {   <span class="comment">// Have to do push_back because the contained elements are not necessarily assignable.</span>
-<a name="l00716"></a>00716             internal_copy_construct(other);
-<a name="l00717"></a>00717         }
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719         <span class="comment">// non-templatized version</span>
-<a name="l00720"></a>00720         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other ) : my_hash_tbl(other.my_hash_tbl) 
-<a name="l00721"></a>00721         {
-<a name="l00722"></a>00722             internal_copy_construct(other);
-<a name="l00723"></a>00723         }
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     <span class="keyword">private</span>:
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00728"></a>00728         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> &
-<a name="l00729"></a>00729         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00730"></a>00730             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
-<a name="l00731"></a>00731             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
-<a name="l00732"></a>00732                 this-><a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); <span class="comment">// resets TLS key</span>
-<a name="l00733"></a>00733                 my_hash_tbl = other.my_hash_tbl;
-<a name="l00734"></a>00734                 <span class="comment">// cannot use assign because T may not be assignable.</span>
-<a name="l00735"></a>00735                 <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
-<a name="l00736"></a>00736                     my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
-<a name="l00737"></a>00737                 }
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739                 <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00740"></a>00740                     my_finit_callback->destroy();
-<a name="l00741"></a>00741                     my_finit_callback = 0;
-<a name="l00742"></a>00742                 }
-<a name="l00743"></a>00743                 <span class="keywordflow">if</span>(my_exemplar_ptr) {
-<a name="l00744"></a>00744                     free_exemplar(my_exemplar_ptr);
-<a name="l00745"></a>00745                     my_exemplar_ptr = 0;
-<a name="l00746"></a>00746                 }
-<a name="l00747"></a>00747                 <span class="keywordflow">if</span>(other.my_finit_callback) {
-<a name="l00748"></a>00748                     my_finit_callback = other.my_finit_callback->make_copy();
-<a name="l00749"></a>00749                 }
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751                 <span class="keywordflow">if</span>(other.my_exemplar_ptr) {
-<a name="l00752"></a>00752                     my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr->value);
-<a name="l00753"></a>00753                 }
-<a name="l00754"></a>00754             }
-<a name="l00755"></a>00755             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00756"></a>00756         }
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     <span class="keyword">public</span>:
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760         <span class="comment">// assignment</span>
-<a name="l00761"></a>00761         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other) {
-<a name="l00762"></a>00762             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00763"></a>00763         }
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00766"></a>00766         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
-<a name="l00767"></a>00767         {
-<a name="l00768"></a>00768             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00769"></a>00769         }
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771     <span class="keyword">private</span>:
-<a name="l00772"></a>00772 
-<a name="l00773"></a>00773         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00774"></a>00774         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00775"></a>00775         T internal_combine(<span class="keyword">typename</span> internal_collection_type::const_range_type r, combine_func_t f_combine) {
-<a name="l00776"></a>00776             <span class="keywordflow">if</span>(r.is_divisible()) {
-<a name="l00777"></a>00777                 <span class="keyword">typename</span> internal_collection_type::const_range_type r2(r,split());
-<a name="l00778"></a>00778                 <span class="keywordflow">return</span> f_combine(internal_combine(r2, f_combine), internal_combine(r, f_combine));
-<a name="l00779"></a>00779             }
-<a name="l00780"></a>00780             <span class="keywordflow">if</span>(r.size() == 1) {
-<a name="l00781"></a>00781                 <span class="keywordflow">return</span> r.begin()->value;
-<a name="l00782"></a>00782             }
-<a name="l00783"></a>00783             <span class="keyword">typename</span> internal_collection_type::const_iterator i2 = r.begin();
-<a name="l00784"></a>00784             ++i2;
-<a name="l00785"></a>00785             <span class="keywordflow">return</span> f_combine(r.begin()->value, i2->value);
-<a name="l00786"></a>00786         }
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788     <span class="keyword">public</span>:
-<a name="l00789"></a>00789 
-<a name="l00790"></a>00790         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00791"></a>00791         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00792"></a>00792         T combine(combine_func_t f_combine) {
-<a name="l00793"></a>00793             <span class="keywordflow">if</span>(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>() == my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()) {
-<a name="l00794"></a>00794                 <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00795"></a>00795                     <span class="keywordflow">return</span> my_finit_callback->apply();
-<a name="l00796"></a>00796                 }
-<a name="l00797"></a>00797                 <span class="keywordflow">return</span> (*my_exemplar_ptr).value;
-<a name="l00798"></a>00798             }
-<a name="l00799"></a>00799             <span class="keyword">typename</span> internal_collection_type::const_range_type r(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(), my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(), (size_t)2);
-<a name="l00800"></a>00800             <span class="keywordflow">return</span> internal_combine(r, f_combine);
-<a name="l00801"></a>00801         }
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
-<a name="l00804"></a>00804         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00805"></a>00805         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
-<a name="l00806"></a>00806             <span class="keywordflow">for</span>(const_iterator ci = <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(); ci != <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(); ++ci) {
-<a name="l00807"></a>00807                 f_combine( *ci );
-<a name="l00808"></a>00808             }
-<a name="l00809"></a>00809         }
-<a name="l00810"></a>00810     }; <span class="comment">// enumerable_thread_specific</span>
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812     <span class="keyword">template</span>< <span class="keyword">typename</span> Container >
-<a name="l00813"></a>00813     <span class="keyword">class </span>flattened2d {
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
-<a name="l00816"></a>00816         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818     <span class="keyword">public</span>:
-<a name="l00819"></a>00819 
-<a name="l00821"></a>00821         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
-<a name="l00822"></a>00822         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
-<a name="l00823"></a>00823         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
-<a name="l00824"></a>00824         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
-<a name="l00825"></a>00825         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
-<a name="l00826"></a>00826         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
-<a name="l00827"></a>00827         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
-<a name="l00828"></a>00828         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
-<a name="l00831"></a>00831         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833         flattened2d( <span class="keyword">const</span> Container &c, <span class="keyword">typename</span> Container::const_iterator b, <span class="keyword">typename</span> Container::const_iterator e ) : 
-<a name="l00834"></a>00834             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836         flattened2d( <span class="keyword">const</span> Container &c ) : 
-<a name="l00837"></a>00837             my_container(const_cast<Container*>(&c)), my_begin(c.<a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()), my_end(c.<a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()) { }
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
-<a name="l00840"></a>00840         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
-<a name="l00841"></a>00841         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
-<a name="l00842"></a>00842         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{
-<a name="l00845"></a>00845             size_type tot_size = 0;
-<a name="l00846"></a>00846             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
-<a name="l00847"></a>00847                 tot_size += i->size();
-<a name="l00848"></a>00848             }
-<a name="l00849"></a>00849             <span class="keywordflow">return</span> tot_size;
-<a name="l00850"></a>00850         }
-<a name="l00851"></a>00851 
-<a name="l00852"></a>00852     <span class="keyword">private</span>:
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854         Container *my_container;
-<a name="l00855"></a>00855         <span class="keyword">typename</span> Container::const_iterator my_begin;
-<a name="l00856"></a>00856         <span class="keyword">typename</span> Container::const_iterator my_end;
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858     };
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l00861"></a>00861     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c, <span class="keyword">const</span> <span class="keyword">typename</span> Container::const_iterator b, <span class="keyword">const</span> <span class="keyword">typename</span> Container::const_iterator e) {
-<a name="l00862"></a>00862         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
-<a name="l00863"></a>00863     }
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l00866"></a>00866     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
-<a name="l00867"></a>00867         <span class="keywordflow">return</span> flattened2d<Container>(c);
-<a name="l00868"></a>00868     }
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870 } <span class="comment">// namespace tbb</span>
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872 <span class="preprocessor">#endif</span>
+<a name="l00403"></a>00403 <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.
diff --git a/doc/html/a00283.html b/doc/html/a00293.html
similarity index 52%
rename from doc/html/a00283.html
rename to doc/html/a00293.html
index 214dd78..124495c 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00293.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>concurrent_vector.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -46,7 +46,7 @@
 <a name="l00025"></a>00025 <span class="preprocessor">#include <algorithm></span>
 <a name="l00026"></a>00026 <span class="preprocessor">#include <iterator></span>
 <a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <cstring></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_exception.h"</span>
 <a name="l00029"></a>00029 <span class="preprocessor">#include "atomic.h"</span>
 <a name="l00030"></a>00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
 <a name="l00031"></a>00031 <span class="preprocessor">#include "blocked_range.h"</span>
@@ -74,10 +74,10 @@
 <a name="l00053"></a>00053 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
 <a name="l00054"></a>00054 <span class="keyword">class </span>concurrent_vector;
 <a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00058"></a>00058 <span class="keyword">namespace </span>internal {
-<a name="l00059"></a>00059 
-<a name="l00061"></a>00061     <span class="keyword">static</span> <span class="keywordtype">void</span> *<span class="keyword">const</span> vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));
+<a name="l00057"></a>00057 <span class="keyword">namespace </span>internal {
+<a name="l00058"></a>00058 
+<a name="l00060"></a>00060     <span class="keyword">static</span> <span class="keywordtype">void</span> *<span class="keyword">const</span> vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));
+<a name="l00061"></a>00061 
 <a name="l00063"></a>00063     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
 <a name="l00064"></a>00064 
 <a name="l00066"></a>00066 
@@ -166,743 +166,743 @@
 <a name="l00158"></a>00158         <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 );
 <a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_assign( <span class="keyword">const</span> concurrent_vector_base_v3& src, size_type element_size,
 <a name="l00160"></a>00160                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
-<a name="l00161"></a>00161         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
-<a name="l00162"></a>00162         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, <span class="keyword">const</span> <span class="keywordtype">void</span> *src,
-<a name="l00165"></a>00165                                                     internal_array_op1 destroy, internal_array_op2 init );
-<a name="l00166"></a>00166         size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-<a name="l00167"></a>00167 
-<a name="l00169"></a>00169         <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 );
-<a name="l00170"></a>00170 <span class="keyword">private</span>:
-<a name="l00172"></a>00172         <span class="keyword">class </span>helper;
-<a name="l00173"></a>00173         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
-<a name="l00174"></a>00174     };
-<a name="l00175"></a>00175     
-<a name="l00176"></a>00176     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
-<a name="l00177"></a>00177 
-<a name="l00179"></a>00179 
-<a name="l00181"></a>00181     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00182"></a>00182     <span class="keyword">class </span>vector_iterator 
-<a name="l00183"></a>00183     {
-<a name="l00185"></a>00185         Container* my_vector;
-<a name="l00186"></a>00186 
-<a name="l00188"></a>00188         size_t my_index;
-<a name="l00189"></a>00189 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192         <span class="keyword">mutable</span> Value* my_item;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-<a name="l00195"></a>00195         <span class="keyword">friend</span> vector_iterator<C,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<C,T>& v );
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00198"></a>00198         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00201"></a>00201         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00204"></a>00204         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
-<a name="l00205"></a>00205     
-<a name="l00206"></a>00206         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00207"></a>00207         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00211"></a>00211         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00136.html">tbb::concurrent_vector</a>;
-<a name="l00212"></a>00212 <span class="preprocessor">#else</span>
-<a name="l00213"></a>00213 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00214"></a>00214 <span class="preprocessor">#endif </span>
-<a name="l00215"></a>00215 <span class="preprocessor"></span>
-<a name="l00216"></a>00216         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
-<a name="l00217"></a>00217             my_vector(const_cast<Container*>(&vector)), 
-<a name="l00218"></a>00218             my_index(index), 
-<a name="l00219"></a>00219             my_item(static_cast<Value*>(ptr))
-<a name="l00220"></a>00220         {}
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     <span class="keyword">public</span>:
-<a name="l00224"></a>00224         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00227"></a>00227             my_vector(other.my_vector),
-<a name="l00228"></a>00228             my_index(other.my_index),
-<a name="l00229"></a>00229             my_item(other.my_item)
-<a name="l00230"></a>00230         {}
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00233"></a>00233             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
-<a name="l00234"></a>00234         }
-<a name="l00235"></a>00235         vector_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00236"></a>00236             my_index+=offset;
-<a name="l00237"></a>00237             my_item = NULL;
-<a name="l00238"></a>00238             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00239"></a>00239         }
-<a name="l00240"></a>00240         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00241"></a>00241             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
-<a name="l00242"></a>00242         }
-<a name="l00243"></a>00243         vector_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00244"></a>00244             my_index-=offset;
-<a name="l00245"></a>00245             my_item = NULL;
-<a name="l00246"></a>00246             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00247"></a>00247         }
-<a name="l00248"></a>00248         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00249"></a>00249             Value* item = my_item;
-<a name="l00250"></a>00250             <span class="keywordflow">if</span>( !item ) {
-<a name="l00251"></a>00251                 item = my_item = &my_vector->internal_subscript(my_index);
-<a name="l00252"></a>00252             }
-<a name="l00253"></a>00253             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00254"></a>00254             <span class="keywordflow">return</span> *item;
-<a name="l00255"></a>00255         }
-<a name="l00256"></a>00256         Value& <a class="code" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00257"></a>00257             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
-<a name="l00258"></a>00258         }
-<a name="l00259"></a>00259         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00260"></a>00260 
-<a name="l00262"></a>00262         vector_iterator& operator++() {
-<a name="l00263"></a>00263             size_t k = ++my_index;
-<a name="l00264"></a>00264             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00265"></a>00265                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00266"></a>00266                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00267"></a>00267                     <span class="comment">// k is a power of two that is at least k-2</span>
-<a name="l00268"></a>00268                     my_item= NULL;
-<a name="l00269"></a>00269                 } <span class="keywordflow">else</span> {
-<a name="l00270"></a>00270                     ++my_item;
-<a name="l00271"></a>00271                 }
-<a name="l00272"></a>00272             }
-<a name="l00273"></a>00273             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00274"></a>00274         }
-<a name="l00275"></a>00275 
-<a name="l00277"></a>00277         vector_iterator& operator--() {
-<a name="l00278"></a>00278             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
-<a name="l00279"></a>00279             size_t k = my_index--;
-<a name="l00280"></a>00280             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00281"></a>00281                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00282"></a>00282                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00283"></a>00283                     <span class="comment">// k is a power of two that is at least k-2  </span>
-<a name="l00284"></a>00284                     my_item= NULL;
-<a name="l00285"></a>00285                 } <span class="keywordflow">else</span> {
-<a name="l00286"></a>00286                     --my_item;
-<a name="l00287"></a>00287                 }
-<a name="l00288"></a>00288             }
-<a name="l00289"></a>00289             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00290"></a>00290         }
-<a name="l00291"></a>00291 
-<a name="l00293"></a>00293         vector_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00294"></a>00294             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00295"></a>00295             operator++();
-<a name="l00296"></a>00296             <span class="keywordflow">return</span> result;
-<a name="l00297"></a>00297         }
-<a name="l00298"></a>00298 
-<a name="l00300"></a>00300         vector_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00301"></a>00301             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00302"></a>00302             operator--();
-<a name="l00303"></a>00303             <span class="keywordflow">return</span> result;
-<a name="l00304"></a>00304         }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306         <span class="comment">// STL support</span>
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00309"></a>00309         <span class="keyword">typedef</span> Value value_type;
-<a name="l00310"></a>00310         <span class="keyword">typedef</span> Value* pointer;
-<a name="l00311"></a>00311         <span class="keyword">typedef</span> Value& reference;
-<a name="l00312"></a>00312         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00313"></a>00313     };
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00316"></a>00316     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
-<a name="l00317"></a>00317         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
-<a name="l00318"></a>00318     }
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00321"></a>00321     <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 ) {
-<a name="l00322"></a>00322         <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_vector == j.my_vector;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00326"></a>00326     <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 ) {
-<a name="l00327"></a>00327         <span class="keywordflow">return</span> !(i==j);
-<a name="l00328"></a>00328     }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00331"></a>00331     <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00332"></a>00332         <span class="keywordflow">return</span> i.my_index<j.my_index;
-<a name="l00333"></a>00333     }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00336"></a>00336     <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 ) {
-<a name="l00337"></a>00337         <span class="keywordflow">return</span> j<i;
-<a name="l00338"></a>00338     }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00341"></a>00341     <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 ) {
-<a name="l00342"></a>00342         <span class="keywordflow">return</span> !(i<j);
-<a name="l00343"></a>00343     }
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00346"></a>00346     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00347"></a>00347         <span class="keywordflow">return</span> !(j<i);
-<a name="l00348"></a>00348     }
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00351"></a>00351     ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00352"></a>00352         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00356"></a>00356     <span class="keyword">class </span>allocator_base {
-<a name="l00357"></a>00357     <span class="keyword">public</span>:
-<a name="l00358"></a>00358         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
-<a name="l00359"></a>00359             rebind<T>::other allocator_type;
-<a name="l00360"></a>00360         allocator_type my_allocator;
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
-<a name="l00363"></a>00363     };
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 } <span class="comment">// namespace internal</span>
-<a name="l00367"></a>00367 <span class="comment"></span>
-<a name="l00369"></a>00369 
-<a name="l00430"></a>00430 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00431"></a><a class="code" href="a00136.html">00431</a> <span class="keyword">class </span><a class="code" href="a00136.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
-<a name="l00432"></a>00432                          <span class="keyword">private</span> internal::concurrent_vector_base {
-<a name="l00433"></a>00433 <span class="keyword">private</span>:
-<a name="l00434"></a>00434     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00435"></a>00435     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00122.html">blocked_range</a><I> {
-<a name="l00436"></a>00436     <span class="keyword">public</span>:
-<a name="l00437"></a>00437         <span class="keyword">typedef</span> T value_type;
-<a name="l00438"></a>00438         <span class="keyword">typedef</span> T& reference;
-<a name="l00439"></a>00439         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00440"></a>00440         <span class="keyword">typedef</span> I iterator;
-<a name="l00441"></a>00441         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00442"></a>00442         generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00122.html">blocked_range<I></a>(begin_,end_,grainsize) {} 
-<a name="l00443"></a>00443         template<typename U>
-<a name="l00444"></a>00444         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00122.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00445"></a>00445         generic_range_type( generic_range_type& r, <a class="code" href="a00165.html">split</a> ) : <a class="code" href="a00122.html">blocked_range<I></a>(r,<a class="code" href="a00165.html">split</a>()) {}
-<a name="l00446"></a>00446     };
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00449"></a>00449     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00450"></a>00450 <span class="keyword">public</span>:
-<a name="l00451"></a>00451     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00452"></a>00452     <span class="comment">// STL compatible types</span>
-<a name="l00453"></a>00453     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00454"></a>00454     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
-<a name="l00455"></a>00455     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457     <span class="keyword">typedef</span> T value_type;
-<a name="l00458"></a>00458     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00459"></a>00459     <span class="keyword">typedef</span> T& reference;
-<a name="l00460"></a>00460     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00461"></a>00461     <span class="keyword">typedef</span> T *pointer;
-<a name="l00462"></a>00462     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
-<a name="l00465"></a>00465     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
-<a name="l00468"></a>00468 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
-<a name="l00469"></a>00469     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
-<a name="l00470"></a>00470     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
-<a name="l00471"></a>00471 <span class="preprocessor">#else</span>
-<a name="l00472"></a>00472 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
-<a name="l00473"></a>00473     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
-<a name="l00474"></a>00474     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
-<a name="l00475"></a>00475 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00478"></a>00478     <span class="comment">// Parallel algorithm support</span>
-<a name="l00479"></a>00479     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00480"></a>00480     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
-<a name="l00481"></a>00481     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00484"></a>00484     <span class="comment">// STL compatible constructors & destructors</span>
-<a name="l00485"></a>00485     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00486"></a>00486 
-<a name="l00488"></a><a class="code" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">00488</a>     <span class="keyword">explicit</span> <a class="code" href="a00136.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00489"></a>00489         : internal::allocator_base<T, A>(a)
-<a name="l00490"></a>00490     {
-<a name="l00491"></a>00491         vector_allocator_ptr = &internal_allocator;
-<a name="l00492"></a>00492     }
-<a name="l00493"></a>00493 
-<a name="l00495"></a><a class="code" href="a00136.html#dd8a200b99a8088435a37934b58fe335">00495</a>     <a class="code" href="a00136.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00496"></a>00496         : internal::allocator_base<T, A>(a)
-<a name="l00497"></a>00497     {
-<a name="l00498"></a>00498         vector_allocator_ptr = &internal_allocator;
-<a name="l00499"></a>00499         <span class="keywordflow">try</span> {
-<a name="l00500"></a>00500             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00501"></a>00501         } <span class="keywordflow">catch</span>(...) {
-<a name="l00502"></a>00502             segment_t *table = my_segment;
-<a name="l00503"></a>00503             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00504"></a>00504             <span class="keywordflow">throw</span>;
-<a name="l00505"></a>00505         }
-<a name="l00506"></a>00506     }
-<a name="l00507"></a>00507 
-<a name="l00509"></a>00509     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00510"></a><a class="code" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">00510</a>     <a class="code" href="a00136.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00511"></a>00511         : internal::allocator_base<T, A>(a)
-<a name="l00512"></a>00512     {
-<a name="l00513"></a>00513         vector_allocator_ptr = &internal_allocator;
-<a name="l00514"></a>00514         <span class="keywordflow">try</span> {
-<a name="l00515"></a>00515             internal_copy(vector.<a class="code" href="a00136.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00516"></a>00516         } <span class="keywordflow">catch</span>(...) {
-<a name="l00517"></a>00517             segment_t *table = my_segment;
-<a name="l00518"></a>00518             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00519"></a>00519             <span class="keywordflow">throw</span>;
-<a name="l00520"></a>00520         }
-<a name="l00521"></a>00521     }
-<a name="l00522"></a>00522 
-<a name="l00524"></a><a class="code" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">00524</a>     <span class="keyword">explicit</span> <a class="code" href="a00136.html">concurrent_vector</a>(size_type n)
-<a name="l00525"></a>00525     {
-<a name="l00526"></a>00526         vector_allocator_ptr = &internal_allocator;
-<a name="l00527"></a>00527         <span class="keywordflow">try</span> {
-<a name="l00528"></a>00528             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
-<a name="l00529"></a>00529         } <span class="keywordflow">catch</span>(...) {
-<a name="l00530"></a>00530             segment_t *table = my_segment;
-<a name="l00531"></a>00531             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00532"></a>00532             <span class="keywordflow">throw</span>;
-<a name="l00533"></a>00533         }
-<a name="l00534"></a>00534     }
-<a name="l00535"></a>00535 
-<a name="l00537"></a><a class="code" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">00537</a>     <a class="code" href="a00136.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00538"></a>00538         : internal::allocator_base<T, A>(a)
-<a name="l00539"></a>00539     {
-<a name="l00540"></a>00540         vector_allocator_ptr = &internal_allocator;
-<a name="l00541"></a>00541         <span class="keywordflow">try</span> {
-<a name="l00542"></a>00542             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00543"></a>00543         } <span class="keywordflow">catch</span>(...) {
-<a name="l00544"></a>00544             segment_t *table = my_segment;
-<a name="l00545"></a>00545             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00546"></a>00546             <span class="keywordflow">throw</span>;
-<a name="l00547"></a>00547         }
-<a name="l00548"></a>00548     }
-<a name="l00549"></a>00549 
-<a name="l00551"></a>00551     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00552"></a><a class="code" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">00552</a>     <a class="code" href="a00136.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00553"></a>00553         : internal::allocator_base<T, A>(a)
-<a name="l00554"></a>00554     {
-<a name="l00555"></a>00555         vector_allocator_ptr = &internal_allocator;
-<a name="l00556"></a>00556         <span class="keywordflow">try</span> {
-<a name="l00557"></a>00557             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-<a name="l00558"></a>00558         } <span class="keywordflow">catch</span>(...) {
-<a name="l00559"></a>00559             segment_t *table = my_segment;
-<a name="l00560"></a>00560             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00561"></a>00561             <span class="keywordflow">throw</span>;
-<a name="l00562"></a>00562         }
-<a name="l00563"></a>00563     }
-<a name="l00564"></a>00564 
-<a name="l00566"></a><a class="code" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">00566</a>     <a class="code" href="a00136.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector</a>& vector ) {
-<a name="l00567"></a>00567         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
-<a name="l00568"></a>00568             internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
-<a name="l00569"></a>00569         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00570"></a>00570     }
-<a name="l00571"></a>00571 
-<a name="l00573"></a>00573     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00574"></a><a class="code" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">00574</a>     <a class="code" href="a00136.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector<T, M></a>& vector ) {
-<a name="l00575"></a>00575         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
-<a name="l00576"></a>00576             internal_assign(vector.internal_vector_base(),
-<a name="l00577"></a>00577                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
-<a name="l00578"></a>00578         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00579"></a>00579     }
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00582"></a>00582     <span class="comment">// Concurrent operations</span>
-<a name="l00583"></a>00583     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00585"></a>00585 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00586"></a>00586 <span class="preprocessor"></span>
-<a name="l00587"></a><a class="code" href="a00136.html#30484e3959892fd5392fa93c873c31f0">00587</a>     size_type grow_by( size_type delta ) {
-<a name="l00588"></a>00588         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590 <span class="preprocessor">#else</span>
-<a name="l00591"></a>00591 <span class="preprocessor"></span>
-<a name="l00592"></a><a class="code" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">00592</a>     iterator grow_by( size_type delta ) {
-<a name="l00593"></a>00593         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size);
-<a name="l00594"></a>00594     }
-<a name="l00595"></a>00595 <span class="preprocessor">#endif</span>
-<a name="l00596"></a>00596 <span class="preprocessor"></span>
-<a name="l00598"></a>00598 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00599"></a>00599 <span class="preprocessor"></span>
-<a name="l00600"></a><a class="code" href="a00136.html#38274ab3f772ecba600c7daca7690102">00600</a>     size_type grow_by( size_type delta, const_reference t ) {
-<a name="l00601"></a>00601         <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;
-<a name="l00602"></a>00602     }
-<a name="l00603"></a>00603 <span class="preprocessor">#else</span>
-<a name="l00604"></a>00604 <span class="preprocessor"></span>
-<a name="l00605"></a><a class="code" href="a00136.html#473a59a4c9308b93411b898b3110d26c">00605</a>     iterator grow_by( size_type delta, const_reference t ) {
-<a name="l00606"></a>00606         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size);
-<a name="l00607"></a>00607     }
-<a name="l00608"></a>00608 <span class="preprocessor">#endif</span>
-<a name="l00609"></a>00609 <span class="preprocessor"></span>
-<a name="l00611"></a>00611 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00612"></a>00612 <span class="preprocessor"></span>
-<a name="l00614"></a><a class="code" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">00614</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
-<a name="l00615"></a>00615         <span class="keywordflow">if</span>( n ) internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
-<a name="l00616"></a>00616     };
-<a name="l00617"></a>00617 <span class="preprocessor">#else</span>
-<a name="l00618"></a>00618 <span class="preprocessor"></span>
-<a name="l00622"></a><a class="code" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">00622</a>     iterator grow_to_at_least( size_type n ) {
-<a name="l00623"></a>00623         size_type m=0;
-<a name="l00624"></a>00624         <span class="keywordflow">if</span>( n ) {
-<a name="l00625"></a>00625             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
-<a name="l00626"></a>00626             <span class="keywordflow">if</span>( m>n ) m=n;
-<a name="l00627"></a>00627         }
-<a name="l00628"></a>00628         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
-<a name="l00629"></a>00629     };
-<a name="l00630"></a>00630 <span class="preprocessor">#endif</span>
-<a name="l00631"></a>00631 <span class="preprocessor"></span>
-<a name="l00633"></a>00633 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00634"></a><a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">00634</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
-<a name="l00635"></a>00635 <span class="preprocessor">#else</span>
-<a name="l00636"></a>00636 <span class="preprocessor"></span>
-<a name="l00637"></a>00637     iterator push_back( const_reference item )
-<a name="l00638"></a>00638 <span class="preprocessor">#endif</span>
-<a name="l00639"></a>00639 <span class="preprocessor"></span>    {
-<a name="l00640"></a>00640         size_type k;
-<a name="l00641"></a>00641         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
-<a name="l00642"></a>00642         internal_loop_guide loop(1, ptr);
-<a name="l00643"></a>00643         loop.init(&item);
-<a name="l00644"></a>00644 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00645"></a>00645 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
-<a name="l00646"></a>00646 <span class="preprocessor">#else</span>
-<a name="l00647"></a>00647 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
-<a name="l00648"></a>00648 <span class="preprocessor">#endif</span>
-<a name="l00649"></a>00649 <span class="preprocessor"></span>    }
-<a name="l00650"></a>00650 
-<a name="l00652"></a>00652 
-<a name="l00654"></a><a class="code" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">00654</a>     reference operator[]( size_type index ) {
-<a name="l00655"></a>00655         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00656"></a>00656     }
-<a name="l00657"></a>00657 
-<a name="l00659"></a><a class="code" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">00659</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
-<a name="l00660"></a>00660         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00661"></a>00661     }
-<a name="l00662"></a>00662 
-<a name="l00664"></a><a class="code" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">00664</a>     reference at( size_type index ) {
-<a name="l00665"></a>00665         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00666"></a>00666     }
-<a name="l00667"></a>00667 
-<a name="l00669"></a><a class="code" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">00669</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
-<a name="l00670"></a>00670         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00671"></a>00671     }
-<a name="l00672"></a>00672 
-<a name="l00674"></a><a class="code" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">00674</a>     range_type range( size_t grainsize = 1) {
-<a name="l00675"></a>00675         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
-<a name="l00676"></a>00676     }
-<a name="l00677"></a>00677 
-<a name="l00679"></a><a class="code" href="a00136.html#3d09ccfb581b879ae64203741035e193">00679</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
-<a name="l00680"></a>00680         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
-<a name="l00681"></a>00681     }
-<a name="l00682"></a>00682     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00683"></a>00683     <span class="comment">// Capacity</span>
-<a name="l00684"></a>00684     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00686"></a><a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">00686</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
-<a name="l00687"></a>00687         size_type sz = my_early_size, cp = internal_capacity();
-<a name="l00688"></a>00688         <span class="keywordflow">return</span> cp < sz ? cp : sz;
-<a name="l00689"></a>00689     }
-<a name="l00690"></a>00690 
-<a name="l00692"></a><a class="code" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">00692</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
-<a name="l00693"></a>00693 
-<a name="l00695"></a><a class="code" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">00695</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
-<a name="l00696"></a>00696 
-<a name="l00698"></a>00698 
-<a name="l00700"></a><a class="code" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">00700</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
-<a name="l00701"></a>00701         <span class="keywordflow">if</span>( n )
-<a name="l00702"></a>00702             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
-<a name="l00703"></a>00703     }
-<a name="l00704"></a>00704 
-<a name="l00706"></a><a class="code" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">00706</a>     <span class="keywordtype">void</span> resize( size_type n ) {
-<a name="l00707"></a>00707         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
-<a name="l00708"></a>00708     }
-<a name="l00709"></a>00709     
-<a name="l00711"></a><a class="code" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">00711</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
-<a name="l00712"></a>00712         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00713"></a>00713     }
-<a name="l00714"></a>00714    
-<a name="l00715"></a>00715 <span class="preprocessor">#if TBB_DEPRECATED </span>
-<a name="l00717"></a><a class="code" href="a00136.html#1693d1da41b1a8235871be9c6633be35">00717</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
-<a name="l00718"></a>00718 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
-<a name="l00719"></a>00719 
-<a name="l00721"></a>00721     <span class="keywordtype">void</span> shrink_to_fit();
-<a name="l00722"></a>00722 
-<a name="l00724"></a><a class="code" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">00724</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(T);}
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00727"></a>00727     <span class="comment">// STL support</span>
-<a name="l00728"></a>00728     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00729"></a>00729 
-<a name="l00731"></a><a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">00731</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
-<a name="l00733"></a><a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">00733</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
-<a name="l00735"></a><a class="code" href="a00136.html#78a06182276ff758788d4c0623ae0d71">00735</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
-<a name="l00737"></a><a class="code" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00737</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
-<a name="l00739"></a><a class="code" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">00739</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
-<a name="l00741"></a><a class="code" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">00741</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
-<a name="l00743"></a><a class="code" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">00743</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
-<a name="l00745"></a><a class="code" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">00745</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
-<a name="l00747"></a><a class="code" href="a00136.html#9f9c103e18d5f212703805354074ad44">00747</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
-<a name="l00749"></a><a class="code" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">00749</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
-<a name="l00751"></a><a class="code" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">00751</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
-<a name="l00753"></a><a class="code" href="a00136.html#fff9cece89438587997ebedf93c5e962">00753</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
-<a name="l00755"></a><a class="code" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">00755</a>     reference front() {
-<a name="l00756"></a>00756         __TBB_ASSERT( size()>0, NULL);
-<a name="l00757"></a>00757         <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
-<a name="l00758"></a>00758     }
-<a name="l00760"></a><a class="code" href="a00136.html#502615a858eb9fa0390ee59169065e90">00760</a>     const_reference front()<span class="keyword"> const </span>{
-<a name="l00761"></a>00761         __TBB_ASSERT( size()>0, NULL);
-<a name="l00762"></a>00762         <span class="keywordflow">return</span> static_cast<const T*>(my_segment[0].array)[0];
-<a name="l00763"></a>00763     }
-<a name="l00765"></a><a class="code" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">00765</a>     reference back() {
-<a name="l00766"></a>00766         __TBB_ASSERT( size()>0, NULL);
-<a name="l00767"></a>00767         <span class="keywordflow">return</span> internal_subscript( size()-1 );
-<a name="l00768"></a>00768     }
-<a name="l00770"></a><a class="code" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">00770</a>     const_reference back()<span class="keyword"> const </span>{
-<a name="l00771"></a>00771         __TBB_ASSERT( size()>0, NULL);
-<a name="l00772"></a>00772         <span class="keywordflow">return</span> internal_subscript( size()-1 );
-<a name="l00773"></a>00773     }
-<a name="l00775"></a><a class="code" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">00775</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00776"></a>00776 
-<a name="l00778"></a><a class="code" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">00778</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
-<a name="l00779"></a>00779         clear();
-<a name="l00780"></a>00780         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00781"></a>00781     }
-<a name="l00782"></a>00782 
-<a name="l00784"></a>00784     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00785"></a><a class="code" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">00785</a>     <span class="keywordtype">void</span> assign(I first, I last) {
-<a name="l00786"></a>00786         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-<a name="l00787"></a>00787     }
-<a name="l00788"></a>00788 
-<a name="l00790"></a><a class="code" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">00790</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00136.html">concurrent_vector</a> &vector) {
-<a name="l00791"></a>00791         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
-<a name="l00792"></a>00792             concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
-<a name="l00793"></a>00793             std::swap(this->my_allocator, vector.my_allocator);
-<a name="l00794"></a>00794         }
-<a name="l00795"></a>00795     }
-<a name="l00796"></a>00796 
-<a name="l00798"></a>00798 
-<a name="l00799"></a><a class="code" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">00799</a>     <span class="keywordtype">void</span> clear() {
-<a name="l00800"></a>00800         internal_clear(&destroy_array);
-<a name="l00801"></a>00801     }
-<a name="l00802"></a>00802 
-<a name="l00804"></a><a class="code" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">00804</a>     ~<a class="code" href="a00136.html">concurrent_vector</a>() {
-<a name="l00805"></a>00805         segment_t *table = my_segment;
-<a name="l00806"></a>00806         internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00807"></a>00807         <span class="comment">// base class destructor call should be then</span>
-<a name="l00808"></a>00808     }
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810     <span class="keyword">const</span> internal::concurrent_vector_base_v3 &internal_vector_base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
-<a name="l00811"></a>00811 <span class="keyword">private</span>:
-<a name="l00813"></a>00813     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
-<a name="l00814"></a>00814         <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
-<a name="l00815"></a>00815     }
-<a name="l00817"></a>00817     <span class="keywordtype">void</span> internal_free_segments(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block);
-<a name="l00818"></a>00818 
-<a name="l00820"></a>00820     T& internal_subscript( size_type index ) <span class="keyword">const</span>;
-<a name="l00821"></a>00821 
-<a name="l00823"></a>00823     T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
-<a name="l00824"></a>00824 
-<a name="l00826"></a>00826     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
-<a name="l00827"></a>00827         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );
-<a name="l00828"></a>00828     }
-<a name="l00829"></a>00829 
-<a name="l00831"></a>00831     <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
-<a name="l00832"></a>00832 
-<a name="l00834"></a>00834     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00835"></a>00835     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<true> *) {
-<a name="l00836"></a>00836         internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
-<a name="l00837"></a>00837     }
-<a name="l00839"></a>00839     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00840"></a>00840     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<false> *) {
-<a name="l00841"></a>00841         internal_assign_iterators(first, last);
-<a name="l00842"></a>00842     }
-<a name="l00844"></a>00844     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00845"></a>00845     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
-<a name="l00846"></a>00846 
-<a name="l00848"></a>00848     <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 );
-<a name="l00849"></a>00849 
-<a name="l00851"></a>00851     <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 );
-<a name="l00852"></a>00852 
-<a name="l00854"></a>00854     <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 );
-<a name="l00855"></a>00855 
-<a name="l00857"></a>00857     <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 );
-<a name="l00858"></a>00858 
-<a name="l00860"></a>00860     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC destroy_array( <span class="keywordtype">void</span>* begin, size_type n );
-<a name="l00861"></a>00861 
-<a name="l00863"></a>00863     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
-<a name="l00864"></a>00864     <span class="keyword">public</span>:
-<a name="l00865"></a>00865         <span class="keyword">const</span> pointer array;
-<a name="l00866"></a>00866         <span class="keyword">const</span> size_type n;
-<a name="l00867"></a>00867         size_type i;
-<a name="l00868"></a>00868         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
-<a name="l00869"></a>00869             : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
-<a name="l00870"></a>00870         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
-<a name="l00871"></a>00871         <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)); }
-<a name="l00872"></a>00872         <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]); }
-<a name="l00873"></a>00873         <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]; }
-<a name="l00874"></a>00874         <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 ); }
-<a name="l00875"></a>00875         ~internal_loop_guide() {
-<a name="l00876"></a>00876             <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
-<a name="l00877"></a>00877                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
-<a name="l00878"></a>00878         }
-<a name="l00879"></a>00879     };
-<a name="l00880"></a>00880 };
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00883"></a><a class="code" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">00883</a> <span class="keywordtype">void</span> <a class="code" href="a00136.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
-<a name="l00884"></a>00884     internal_segments_table old;
-<a name="l00885"></a>00885     <span class="keywordflow">try</span> {
-<a name="l00886"></a>00886         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
-<a name="l00887"></a>00887             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
-<a name="l00888"></a>00888     } <span class="keywordflow">catch</span>(...) {
-<a name="l00889"></a>00889         <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>
-<a name="l00890"></a>00890             internal_free_segments( old.table, 1, old.first_block );
-<a name="l00891"></a>00891         <span class="keywordflow">throw</span>;
-<a name="l00892"></a>00892     }
-<a name="l00893"></a>00893 }
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00896"></a>00896 <span class="keywordtype">void</span> <a class="code" href="a00136.html">concurrent_vector<T, A>::internal_free_segments</a>(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block) {
-<a name="l00897"></a>00897     <span class="comment">// Free the arrays</span>
-<a name="l00898"></a>00898     <span class="keywordflow">while</span>( k > first_block ) {
-<a name="l00899"></a>00899         --k;
-<a name="l00900"></a>00900         T* array = static_cast<T*>(table[k]);
-<a name="l00901"></a>00901         table[k] = NULL;
-<a name="l00902"></a>00902         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00903"></a>00903             this->my_allocator.deallocate( array, segment_size(k) );
-<a name="l00904"></a>00904     }
-<a name="l00905"></a>00905     T* array = static_cast<T*>(table[0]);
-<a name="l00906"></a>00906     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
-<a name="l00907"></a>00907         __TBB_ASSERT( first_block > 0, NULL );
-<a name="l00908"></a>00908         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
-<a name="l00909"></a>00909         this->my_allocator.deallocate( array, segment_size(first_block) );
-<a name="l00910"></a>00910     }
-<a name="l00911"></a>00911 }
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00914"></a>00914 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
-<a name="l00915"></a>00915     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</span> );
-<a name="l00916"></a>00916     size_type j = index;
-<a name="l00917"></a>00917     segment_index_t k = segment_base_index_of( j );
-<a name="l00918"></a>00918     __TBB_ASSERT( my_segment != (segment_t*)my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00919"></a>00919     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
-<a name="l00920"></a>00920 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00921"></a>00921 <span class="preprocessor"></span>    T* array = static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array));
-<a name="l00922"></a>00922 <span class="preprocessor">#else</span>
-<a name="l00923"></a>00923 <span class="preprocessor"></span>    T* array = static_cast<T*>(my_segment[k].array);
-<a name="l00924"></a>00924 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00925"></a>00925     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
-<a name="l00926"></a>00926     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00927"></a>00927     <span class="keywordflow">return</span> array[j];
-<a name="l00928"></a>00928 }
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00931"></a>00931 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
-<a name="l00932"></a>00932     <span class="keywordflow">if</span>( index >= my_early_size )
-<a name="l00933"></a>00933         internal_throw_exception(0); <span class="comment">// throw std::out_of_range</span>
-<a name="l00934"></a>00934     size_type j = index;
-<a name="l00935"></a>00935     segment_index_t k = segment_base_index_of( j );
-<a name="l00936"></a>00936     <span class="keywordflow">if</span>( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
-<a name="l00937"></a>00937         internal_throw_exception(1); <span class="comment">// throw std::range_error</span>
-<a name="l00938"></a>00938     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
-<a name="l00939"></a>00939     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00940"></a>00940         internal_throw_exception(2); <span class="comment">// throw std::range_error</span>
-<a name="l00941"></a>00941     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
-<a name="l00942"></a>00942 }
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944 <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>
-<a name="l00945"></a>00945 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
-<a name="l00946"></a>00946     __TBB_ASSERT(my_early_size == 0, NULL);
-<a name="l00947"></a>00947     size_type n = std::distance(first, last);
-<a name="l00948"></a>00948     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
-<a name="l00949"></a>00949     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
-<a name="l00950"></a>00950     my_early_size = n;
-<a name="l00951"></a>00951     segment_index_t k = 0;
-<a name="l00952"></a>00952     size_type sz = segment_size( my_first_block );
-<a name="l00953"></a>00953     <span class="keywordflow">while</span>( sz < n ) {
-<a name="l00954"></a>00954         internal_loop_guide loop(sz, my_segment[k].array);
-<a name="l00955"></a>00955         loop.iterate(first);
-<a name="l00956"></a>00956         n -= sz;
-<a name="l00957"></a>00957         <span class="keywordflow">if</span>( !k ) k = my_first_block;
-<a name="l00958"></a>00958         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
-<a name="l00959"></a>00959     }
-<a name="l00960"></a>00960     internal_loop_guide loop(n, my_segment[k].array);
-<a name="l00961"></a>00961     loop.iterate(first);
-<a name="l00962"></a>00962 }
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00965"></a>00965 <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 ) {
-<a name="l00966"></a>00966     internal_loop_guide loop(n, begin); loop.init();
-<a name="l00967"></a>00967 }
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00970"></a>00970 <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 ) {
-<a name="l00971"></a>00971     internal_loop_guide loop(n, begin); loop.init(src);
-<a name="l00972"></a>00972 }
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00975"></a>00975 <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 ) {
-<a name="l00976"></a>00976     internal_loop_guide loop(n, dst); loop.copy(src);
-<a name="l00977"></a>00977 }
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00980"></a>00980 <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 ) {
-<a name="l00981"></a>00981     internal_loop_guide loop(n, dst); loop.assign(src);
-<a name="l00982"></a>00982 }
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00985"></a>00985 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
-<a name="l00986"></a>00986 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00987"></a>00987 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
-<a name="l00988"></a>00988 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00989"></a>00989 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00990"></a>00990 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
-<a name="l00991"></a>00991     T* array = static_cast<T*>(begin);
-<a name="l00992"></a>00992     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
-<a name="l00993"></a>00993         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
-<a name="l00994"></a>00994 }
-<a name="l00995"></a>00995 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00996"></a>00996 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00997"></a>00997 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
-<a name="l00998"></a>00998 <span class="preprocessor"></span>
-<a name="l00999"></a>00999 <span class="comment">// concurrent_vector's template functions</span>
-<a name="l01000"></a>01000 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01001"></a>01001 <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) {
-<a name="l01002"></a>01002     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
-<a name="l01003"></a>01003     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01004"></a>01004     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
-<a name="l01005"></a>01005     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
-<a name="l01006"></a>01006     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
-<a name="l01007"></a>01007         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01008"></a>01008     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01009"></a>01009 }
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01012"></a>01012 <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)
-<a name="l01013"></a>01013 {    <span class="keywordflow">return</span> !(a == b); }
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01016"></a>01016 <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)
-<a name="l01017"></a>01017 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
-<a name="l01018"></a>01018 
-<a name="l01019"></a>01019 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01020"></a>01020 <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)
-<a name="l01021"></a>01021 {    <span class="keywordflow">return</span> b < a; }
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01024"></a>01024 <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)
-<a name="l01025"></a>01025 {    <span class="keywordflow">return</span> !(b < a); }
-<a name="l01026"></a>01026 
-<a name="l01027"></a>01027 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-<a name="l01028"></a>01028 <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)
-<a name="l01029"></a>01029 {    <span class="keywordflow">return</span> !(a < b); }
-<a name="l01030"></a>01030 
-<a name="l01031"></a>01031 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l01032"></a>01032 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
-<a name="l01033"></a>01033 {    a.swap( b ); }
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035 } <span class="comment">// namespace tbb</span>
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
-<a name="l01038"></a>01038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l01039"></a>01039 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
-<a name="l01040"></a>01040 <span class="preprocessor"></span>
-<a name="l01041"></a>01041 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
+<a name="l00162"></a>00162         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
+<a name="l00163"></a>00163         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, <span class="keyword">const</span> <span class="keywordtype">void</span> *src,
+<a name="l00166"></a>00166                                                     internal_array_op1 destroy, internal_array_op2 init );
+<a name="l00167"></a>00167         size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00168"></a>00168 
+<a name="l00170"></a>00170         <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 );
+<a name="l00171"></a>00171 <span class="keyword">private</span>:
+<a name="l00173"></a>00173         <span class="keyword">class </span>helper;
+<a name="l00174"></a>00174         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
+<a name="l00175"></a>00175     };
+<a name="l00176"></a>00176     
+<a name="l00177"></a>00177     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
+<a name="l00178"></a>00178 
+<a name="l00180"></a>00180 
+<a name="l00182"></a>00182     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00183"></a>00183     <span class="keyword">class </span>vector_iterator 
+<a name="l00184"></a>00184     {
+<a name="l00186"></a>00186         Container* my_vector;
+<a name="l00187"></a>00187 
+<a name="l00189"></a>00189         size_t my_index;
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193         <span class="keyword">mutable</span> Value* my_item;
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
+<a name="l00196"></a>00196         <span class="keyword">friend</span> vector_iterator<C,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<C,T>& v );
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00199"></a>00199         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00202"></a>00202         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00205"></a>00205         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<C,T>& i, <span class="keyword">const</span> vector_iterator<C,U>& j );
+<a name="l00206"></a>00206     
+<a name="l00207"></a>00207         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00208"></a>00208         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00211"></a>00211 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00212"></a>00212         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00141.html">tbb::concurrent_vector</a>;
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00215"></a>00215 <span class="preprocessor">#endif </span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>
+<a name="l00217"></a>00217         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
+<a name="l00218"></a>00218             my_vector(const_cast<Container*>(&vector)), 
+<a name="l00219"></a>00219             my_index(index), 
+<a name="l00220"></a>00220             my_item(static_cast<Value*>(ptr))
+<a name="l00221"></a>00221         {}
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223     <span class="keyword">public</span>:
+<a name="l00225"></a>00225         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00228"></a>00228             my_vector(other.my_vector),
+<a name="l00229"></a>00229             my_index(other.my_index),
+<a name="l00230"></a>00230             my_item(other.my_item)
+<a name="l00231"></a>00231         {}
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00234"></a>00234             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
+<a name="l00235"></a>00235         }
+<a name="l00236"></a>00236         vector_iterator &operator+=( ptrdiff_t offset ) {
+<a name="l00237"></a>00237             my_index+=offset;
+<a name="l00238"></a>00238             my_item = NULL;
+<a name="l00239"></a>00239             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00240"></a>00240         }
+<a name="l00241"></a>00241         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00242"></a>00242             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
+<a name="l00243"></a>00243         }
+<a name="l00244"></a>00244         vector_iterator &operator-=( ptrdiff_t offset ) {
+<a name="l00245"></a>00245             my_index-=offset;
+<a name="l00246"></a>00246             my_item = NULL;
+<a name="l00247"></a>00247             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00248"></a>00248         }
+<a name="l00249"></a>00249         Value& operator*()<span class="keyword"> const </span>{
+<a name="l00250"></a>00250             Value* item = my_item;
+<a name="l00251"></a>00251             <span class="keywordflow">if</span>( !item ) {
+<a name="l00252"></a>00252                 item = my_item = &my_vector->internal_subscript(my_index);
+<a name="l00253"></a>00253             }
+<a name="l00254"></a>00254             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00255"></a>00255             <span class="keywordflow">return</span> *item;
+<a name="l00256"></a>00256         }
+<a name="l00257"></a>00257         Value& <a class="code" href="a00141.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00258"></a>00258             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
+<a name="l00259"></a>00259         }
+<a name="l00260"></a>00260         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00261"></a>00261 
+<a name="l00263"></a>00263         vector_iterator& operator++() {
+<a name="l00264"></a>00264             size_t k = ++my_index;
+<a name="l00265"></a>00265             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00266"></a>00266                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00267"></a>00267                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00268"></a>00268                     <span class="comment">// k is a power of two that is at least k-2</span>
+<a name="l00269"></a>00269                     my_item= NULL;
+<a name="l00270"></a>00270                 } <span class="keywordflow">else</span> {
+<a name="l00271"></a>00271                     ++my_item;
+<a name="l00272"></a>00272                 }
+<a name="l00273"></a>00273             }
+<a name="l00274"></a>00274             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00275"></a>00275         }
+<a name="l00276"></a>00276 
+<a name="l00278"></a>00278         vector_iterator& operator--() {
+<a name="l00279"></a>00279             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
+<a name="l00280"></a>00280             size_t k = my_index--;
+<a name="l00281"></a>00281             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00282"></a>00282                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00283"></a>00283                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00284"></a>00284                     <span class="comment">// k is a power of two that is at least k-2  </span>
+<a name="l00285"></a>00285                     my_item= NULL;
+<a name="l00286"></a>00286                 } <span class="keywordflow">else</span> {
+<a name="l00287"></a>00287                     --my_item;
+<a name="l00288"></a>00288                 }
+<a name="l00289"></a>00289             }
+<a name="l00290"></a>00290             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00291"></a>00291         }
+<a name="l00292"></a>00292 
+<a name="l00294"></a>00294         vector_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00295"></a>00295             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00296"></a>00296             operator++();
+<a name="l00297"></a>00297             <span class="keywordflow">return</span> result;
+<a name="l00298"></a>00298         }
+<a name="l00299"></a>00299 
+<a name="l00301"></a>00301         vector_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00302"></a>00302             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00303"></a>00303             operator--();
+<a name="l00304"></a>00304             <span class="keywordflow">return</span> result;
+<a name="l00305"></a>00305         }
+<a name="l00306"></a>00306 
+<a name="l00307"></a>00307         <span class="comment">// STL support</span>
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00310"></a>00310         <span class="keyword">typedef</span> Value value_type;
+<a name="l00311"></a>00311         <span class="keyword">typedef</span> Value* pointer;
+<a name="l00312"></a>00312         <span class="keyword">typedef</span> Value& reference;
+<a name="l00313"></a>00313         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<a name="l00314"></a>00314     };
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
+<a name="l00317"></a>00317     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
+<a name="l00318"></a>00318         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
+<a name="l00319"></a>00319     }
+<a name="l00320"></a>00320 
+<a name="l00321"></a>00321     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00322"></a>00322     <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 ) {
+<a name="l00323"></a>00323         <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_vector == j.my_vector;
+<a name="l00324"></a>00324     }
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00327"></a>00327     <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 ) {
+<a name="l00328"></a>00328         <span class="keywordflow">return</span> !(i==j);
+<a name="l00329"></a>00329     }
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00332"></a>00332     <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00333"></a>00333         <span class="keywordflow">return</span> i.my_index<j.my_index;
+<a name="l00334"></a>00334     }
+<a name="l00335"></a>00335 
+<a name="l00336"></a>00336     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00337"></a>00337     <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 ) {
+<a name="l00338"></a>00338         <span class="keywordflow">return</span> j<i;
+<a name="l00339"></a>00339     }
+<a name="l00340"></a>00340 
+<a name="l00341"></a>00341     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00342"></a>00342     <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 ) {
+<a name="l00343"></a>00343         <span class="keywordflow">return</span> !(i<j);
+<a name="l00344"></a>00344     }
+<a name="l00345"></a>00345 
+<a name="l00346"></a>00346     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00347"></a>00347     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00348"></a>00348         <span class="keywordflow">return</span> !(j<i);
+<a name="l00349"></a>00349     }
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00352"></a>00352     ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00353"></a>00353         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+<a name="l00354"></a>00354     }
+<a name="l00355"></a>00355 
+<a name="l00356"></a>00356     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00357"></a>00357     <span class="keyword">class </span>allocator_base {
+<a name="l00358"></a>00358     <span class="keyword">public</span>:
+<a name="l00359"></a>00359         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
+<a name="l00360"></a>00360             rebind<T>::other allocator_type;
+<a name="l00361"></a>00361         allocator_type my_allocator;
+<a name="l00362"></a>00362 
+<a name="l00363"></a>00363         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
+<a name="l00364"></a>00364     };
+<a name="l00365"></a>00365 
+<a name="l00366"></a>00366 } <span class="comment">// namespace internal</span>
+<a name="l00368"></a>00368 <span class="comment"></span>
+<a name="l00370"></a>00370 
+<a name="l00431"></a>00431 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00432"></a><a class="code" href="a00141.html">00432</a> <span class="keyword">class </span><a class="code" href="a00141.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
+<a name="l00433"></a>00433                          <span class="keyword">private</span> internal::concurrent_vector_base {
+<a name="l00434"></a>00434 <span class="keyword">private</span>:
+<a name="l00435"></a>00435     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00436"></a>00436     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00127.html">blocked_range</a><I> {
+<a name="l00437"></a>00437     <span class="keyword">public</span>:
+<a name="l00438"></a>00438         <span class="keyword">typedef</span> T value_type;
+<a name="l00439"></a>00439         <span class="keyword">typedef</span> T& reference;
+<a name="l00440"></a>00440         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00441"></a>00441         <span class="keyword">typedef</span> I iterator;
+<a name="l00442"></a>00442         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00443"></a>00443         generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00127.html">blocked_range<I></a>(begin_,end_,grainsize) {} 
+<a name="l00444"></a>00444         template<typename U>
+<a name="l00445"></a>00445         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00127.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00446"></a>00446         generic_range_type( generic_range_type& r, <a class="code" href="a00173.html">split</a> ) : <a class="code" href="a00127.html">blocked_range<I></a>(r,<a class="code" href="a00173.html">split</a>()) {}
+<a name="l00447"></a>00447     };
+<a name="l00448"></a>00448 
+<a name="l00449"></a>00449     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00450"></a>00450     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00451"></a>00451 <span class="keyword">public</span>:
+<a name="l00452"></a>00452     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00453"></a>00453     <span class="comment">// STL compatible types</span>
+<a name="l00454"></a>00454     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00455"></a>00455     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
+<a name="l00456"></a>00456     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
+<a name="l00457"></a>00457 
+<a name="l00458"></a>00458     <span class="keyword">typedef</span> T value_type;
+<a name="l00459"></a>00459     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00460"></a>00460     <span class="keyword">typedef</span> T& reference;
+<a name="l00461"></a>00461     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00462"></a>00462     <span class="keyword">typedef</span> T *pointer;
+<a name="l00463"></a>00463     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
+<a name="l00464"></a>00464 
+<a name="l00465"></a>00465     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
+<a name="l00466"></a>00466     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
+<a name="l00469"></a>00469 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
+<a name="l00470"></a>00470     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
+<a name="l00471"></a>00471     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
+<a name="l00472"></a>00472 <span class="preprocessor">#else</span>
+<a name="l00473"></a>00473 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
+<a name="l00474"></a>00474     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+<a name="l00475"></a>00475     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+<a name="l00476"></a>00476 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
+<a name="l00477"></a>00477 
+<a name="l00478"></a>00478     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00479"></a>00479     <span class="comment">// Parallel algorithm support</span>
+<a name="l00480"></a>00480     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00481"></a>00481     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
+<a name="l00482"></a>00482     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00485"></a>00485     <span class="comment">// STL compatible constructors & destructors</span>
+<a name="l00486"></a>00486     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00487"></a>00487 
+<a name="l00489"></a><a class="code" href="a00141.html#2c8ca9cabfcd30ad5943324c853664b5">00489</a>     <span class="keyword">explicit</span> <a class="code" href="a00141.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00490"></a>00490         : internal::allocator_base<T, A>(a)
+<a name="l00491"></a>00491     {
+<a name="l00492"></a>00492         vector_allocator_ptr = &internal_allocator;
+<a name="l00493"></a>00493     }
+<a name="l00494"></a>00494 
+<a name="l00496"></a><a class="code" href="a00141.html#dd8a200b99a8088435a37934b58fe335">00496</a>     <a class="code" href="a00141.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00141.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00497"></a>00497         : internal::allocator_base<T, A>(a)
+<a name="l00498"></a>00498     {
+<a name="l00499"></a>00499         vector_allocator_ptr = &internal_allocator;
+<a name="l00500"></a>00500         <span class="keywordflow">try</span> {
+<a name="l00501"></a>00501             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00502"></a>00502         } <span class="keywordflow">catch</span>(...) {
+<a name="l00503"></a>00503             segment_t *table = my_segment;
+<a name="l00504"></a>00504             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00505"></a>00505             <span class="keywordflow">throw</span>;
+<a name="l00506"></a>00506         }
+<a name="l00507"></a>00507     }
+<a name="l00508"></a>00508 
+<a name="l00510"></a>00510     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00511"></a><a class="code" href="a00141.html#64432f13f7b29bfe4acfb5568f34f3a8">00511</a>     <a class="code" href="a00141.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00141.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00512"></a>00512         : internal::allocator_base<T, A>(a)
+<a name="l00513"></a>00513     {
+<a name="l00514"></a>00514         vector_allocator_ptr = &internal_allocator;
+<a name="l00515"></a>00515         <span class="keywordflow">try</span> {
+<a name="l00516"></a>00516             internal_copy(vector.<a class="code" href="a00141.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00517"></a>00517         } <span class="keywordflow">catch</span>(...) {
+<a name="l00518"></a>00518             segment_t *table = my_segment;
+<a name="l00519"></a>00519             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00520"></a>00520             <span class="keywordflow">throw</span>;
+<a name="l00521"></a>00521         }
+<a name="l00522"></a>00522     }
+<a name="l00523"></a>00523 
+<a name="l00525"></a><a class="code" href="a00141.html#2a2e261dfe1cab3f73f7b1a94137cfca">00525</a>     <span class="keyword">explicit</span> <a class="code" href="a00141.html">concurrent_vector</a>(size_type n)
+<a name="l00526"></a>00526     {
+<a name="l00527"></a>00527         vector_allocator_ptr = &internal_allocator;
+<a name="l00528"></a>00528         <span class="keywordflow">try</span> {
+<a name="l00529"></a>00529             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00530"></a>00530         } <span class="keywordflow">catch</span>(...) {
+<a name="l00531"></a>00531             segment_t *table = my_segment;
+<a name="l00532"></a>00532             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00533"></a>00533             <span class="keywordflow">throw</span>;
+<a name="l00534"></a>00534         }
+<a name="l00535"></a>00535     }
+<a name="l00536"></a>00536 
+<a name="l00538"></a><a class="code" href="a00141.html#3883a8a908b44e249a57f454de3f55d8">00538</a>     <a class="code" href="a00141.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00539"></a>00539         : internal::allocator_base<T, A>(a)
+<a name="l00540"></a>00540     {
+<a name="l00541"></a>00541         vector_allocator_ptr = &internal_allocator;
+<a name="l00542"></a>00542         <span class="keywordflow">try</span> {
+<a name="l00543"></a>00543             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00544"></a>00544         } <span class="keywordflow">catch</span>(...) {
+<a name="l00545"></a>00545             segment_t *table = my_segment;
+<a name="l00546"></a>00546             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00547"></a>00547             <span class="keywordflow">throw</span>;
+<a name="l00548"></a>00548         }
+<a name="l00549"></a>00549     }
+<a name="l00550"></a>00550 
+<a name="l00552"></a>00552     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00553"></a><a class="code" href="a00141.html#4450de83c5862ea4bcd9443fd7e67419">00553</a>     <a class="code" href="a00141.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00554"></a>00554         : internal::allocator_base<T, A>(a)
+<a name="l00555"></a>00555     {
+<a name="l00556"></a>00556         vector_allocator_ptr = &internal_allocator;
+<a name="l00557"></a>00557         <span class="keywordflow">try</span> {
+<a name="l00558"></a>00558             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00559"></a>00559         } <span class="keywordflow">catch</span>(...) {
+<a name="l00560"></a>00560             segment_t *table = my_segment;
+<a name="l00561"></a>00561             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00562"></a>00562             <span class="keywordflow">throw</span>;
+<a name="l00563"></a>00563         }
+<a name="l00564"></a>00564     }
+<a name="l00565"></a>00565 
+<a name="l00567"></a><a class="code" href="a00141.html#691f0f3cda3e489c37a657016e375eaf">00567</a>     <a class="code" href="a00141.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00141.html">concurrent_vector</a>& vector ) {
+<a name="l00568"></a>00568         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
+<a name="l00569"></a>00569             internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
+<a name="l00570"></a>00570         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00571"></a>00571     }
+<a name="l00572"></a>00572 
+<a name="l00574"></a>00574     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00575"></a><a class="code" href="a00141.html#19f4ab88a01b0fd056af3bba463e7bd6">00575</a>     <a class="code" href="a00141.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00141.html">concurrent_vector<T, M></a>& vector ) {
+<a name="l00576"></a>00576         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
+<a name="l00577"></a>00577             internal_assign(vector.internal_vector_base(),
+<a name="l00578"></a>00578                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
+<a name="l00579"></a>00579         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00580"></a>00580     }
+<a name="l00581"></a>00581 
+<a name="l00582"></a>00582     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00583"></a>00583     <span class="comment">// Concurrent operations</span>
+<a name="l00584"></a>00584     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00586"></a>00586 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00587"></a>00587 <span class="preprocessor"></span>
+<a name="l00588"></a><a class="code" href="a00141.html#30484e3959892fd5392fa93c873c31f0">00588</a>     size_type grow_by( size_type delta ) {
+<a name="l00589"></a>00589         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
+<a name="l00590"></a>00590     }
+<a name="l00591"></a>00591 <span class="preprocessor">#else</span>
+<a name="l00592"></a>00592 <span class="preprocessor"></span>
+<a name="l00593"></a><a class="code" href="a00141.html#c8177b1865270ea68aa1ab9148e5e35e">00593</a>     iterator grow_by( size_type delta ) {
+<a name="l00594"></a>00594         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size);
+<a name="l00595"></a>00595     }
+<a name="l00596"></a>00596 <span class="preprocessor">#endif</span>
+<a name="l00597"></a>00597 <span class="preprocessor"></span>
+<a name="l00599"></a>00599 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00600"></a>00600 <span class="preprocessor"></span>
+<a name="l00601"></a><a class="code" href="a00141.html#38274ab3f772ecba600c7daca7690102">00601</a>     size_type grow_by( size_type delta, const_reference t ) {
+<a name="l00602"></a>00602         <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;
+<a name="l00603"></a>00603     }
+<a name="l00604"></a>00604 <span class="preprocessor">#else</span>
+<a name="l00605"></a>00605 <span class="preprocessor"></span>
+<a name="l00606"></a><a class="code" href="a00141.html#473a59a4c9308b93411b898b3110d26c">00606</a>     iterator grow_by( size_type delta, const_reference t ) {
+<a name="l00607"></a>00607         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size);
+<a name="l00608"></a>00608     }
+<a name="l00609"></a>00609 <span class="preprocessor">#endif</span>
+<a name="l00610"></a>00610 <span class="preprocessor"></span>
+<a name="l00612"></a>00612 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00613"></a>00613 <span class="preprocessor"></span>
+<a name="l00615"></a><a class="code" href="a00141.html#47fe588214dd5fa06ab6e8ab78d83874">00615</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+<a name="l00616"></a>00616         <span class="keywordflow">if</span>( n ) internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
+<a name="l00617"></a>00617     };
+<a name="l00618"></a>00618 <span class="preprocessor">#else</span>
+<a name="l00619"></a>00619 <span class="preprocessor"></span>
+<a name="l00623"></a><a class="code" href="a00141.html#a7e3b67c8ccab16d0aecc80899ae799d">00623</a>     iterator grow_to_at_least( size_type n ) {
+<a name="l00624"></a>00624         size_type m=0;
+<a name="l00625"></a>00625         <span class="keywordflow">if</span>( n ) {
+<a name="l00626"></a>00626             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
+<a name="l00627"></a>00627             <span class="keywordflow">if</span>( m>n ) m=n;
+<a name="l00628"></a>00628         }
+<a name="l00629"></a>00629         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
+<a name="l00630"></a>00630     };
+<a name="l00631"></a>00631 <span class="preprocessor">#endif</span>
+<a name="l00632"></a>00632 <span class="preprocessor"></span>
+<a name="l00634"></a>00634 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00635"></a><a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">00635</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
+<a name="l00636"></a>00636 <span class="preprocessor">#else</span>
+<a name="l00637"></a>00637 <span class="preprocessor"></span>
+<a name="l00638"></a>00638     iterator push_back( const_reference item )
+<a name="l00639"></a>00639 <span class="preprocessor">#endif</span>
+<a name="l00640"></a>00640 <span class="preprocessor"></span>    {
+<a name="l00641"></a>00641         size_type k;
+<a name="l00642"></a>00642         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
+<a name="l00643"></a>00643         internal_loop_guide loop(1, ptr);
+<a name="l00644"></a>00644         loop.init(&item);
+<a name="l00645"></a>00645 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00646"></a>00646 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
+<a name="l00647"></a>00647 <span class="preprocessor">#else</span>
+<a name="l00648"></a>00648 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
+<a name="l00649"></a>00649 <span class="preprocessor">#endif</span>
+<a name="l00650"></a>00650 <span class="preprocessor"></span>    }
+<a name="l00651"></a>00651 
+<a name="l00653"></a>00653 
+<a name="l00655"></a><a class="code" href="a00141.html#4c52f2950bb1832886bd4458eb09d7eb">00655</a>     reference operator[]( size_type index ) {
+<a name="l00656"></a>00656         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00657"></a>00657     }
+<a name="l00658"></a>00658 
+<a name="l00660"></a><a class="code" href="a00141.html#c6fade5c732cc95274d1d8277ea619d1">00660</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+<a name="l00661"></a>00661         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00662"></a>00662     }
+<a name="l00663"></a>00663 
+<a name="l00665"></a><a class="code" href="a00141.html#0c073ca43e787c7cbf7b0e26d2221748">00665</a>     reference at( size_type index ) {
+<a name="l00666"></a>00666         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00667"></a>00667     }
+<a name="l00668"></a>00668 
+<a name="l00670"></a><a class="code" href="a00141.html#23e14a38af748edff96a7adc3a0f1c58">00670</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
+<a name="l00671"></a>00671         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00672"></a>00672     }
+<a name="l00673"></a>00673 
+<a name="l00675"></a><a class="code" href="a00141.html#a4c6ffff3bf08b92939aa2fc516edfba">00675</a>     range_type range( size_t grainsize = 1) {
+<a name="l00676"></a>00676         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+<a name="l00677"></a>00677     }
+<a name="l00678"></a>00678 
+<a name="l00680"></a><a class="code" href="a00141.html#3d09ccfb581b879ae64203741035e193">00680</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+<a name="l00681"></a>00681         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+<a name="l00682"></a>00682     }
+<a name="l00683"></a>00683     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00684"></a>00684     <span class="comment">// Capacity</span>
+<a name="l00685"></a>00685     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00687"></a><a class="code" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">00687</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
+<a name="l00688"></a>00688         size_type sz = my_early_size, cp = internal_capacity();
+<a name="l00689"></a>00689         <span class="keywordflow">return</span> cp < sz ? cp : sz;
+<a name="l00690"></a>00690     }
+<a name="l00691"></a>00691 
+<a name="l00693"></a><a class="code" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">00693</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
+<a name="l00694"></a>00694 
+<a name="l00696"></a><a class="code" href="a00141.html#3ed6b9ae7217af5103d974045b6f5cd5">00696</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+<a name="l00697"></a>00697 
+<a name="l00699"></a>00699 
+<a name="l00701"></a><a class="code" href="a00141.html#5a0ce05026994b010018f72cfdeb72c1">00701</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
+<a name="l00702"></a>00702         <span class="keywordflow">if</span>( n )
+<a name="l00703"></a>00703             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
+<a name="l00704"></a>00704     }
+<a name="l00705"></a>00705 
+<a name="l00707"></a><a class="code" href="a00141.html#8dfb0cb0eef96d440b4dcf801807a718">00707</a>     <span class="keywordtype">void</span> resize( size_type n ) {
+<a name="l00708"></a>00708         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00709"></a>00709     }
+<a name="l00710"></a>00710     
+<a name="l00712"></a><a class="code" href="a00141.html#98ce6b2c6d2622f0c030b46dfac3880c">00712</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
+<a name="l00713"></a>00713         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00714"></a>00714     }
+<a name="l00715"></a>00715    
+<a name="l00716"></a>00716 <span class="preprocessor">#if TBB_DEPRECATED </span>
+<a name="l00718"></a><a class="code" href="a00141.html#1693d1da41b1a8235871be9c6633be35">00718</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
+<a name="l00719"></a>00719 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00720"></a>00720 
+<a name="l00722"></a>00722     <span class="keywordtype">void</span> shrink_to_fit();
+<a name="l00723"></a>00723 
+<a name="l00725"></a><a class="code" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">00725</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(T);}
+<a name="l00726"></a>00726 
+<a name="l00727"></a>00727     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00728"></a>00728     <span class="comment">// STL support</span>
+<a name="l00729"></a>00729     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00730"></a>00730 
+<a name="l00732"></a><a class="code" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">00732</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
+<a name="l00734"></a><a class="code" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">00734</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
+<a name="l00736"></a><a class="code" href="a00141.html#78a06182276ff758788d4c0623ae0d71">00736</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00738"></a><a class="code" href="a00141.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00738</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00740"></a><a class="code" href="a00141.html#f88fcf1c920693c39bd9709db33c199f">00740</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00742"></a><a class="code" href="a00141.html#0c15a5d0f1cf75d687dabba07da1d46b">00742</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00744"></a><a class="code" href="a00141.html#5e220926d09236d98f04fe0721e5f9a1">00744</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
+<a name="l00746"></a><a class="code" href="a00141.html#290119a4eb43cd6a9e98fa17016ba3c2">00746</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
+<a name="l00748"></a><a class="code" href="a00141.html#9f9c103e18d5f212703805354074ad44">00748</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00750"></a><a class="code" href="a00141.html#d438b9b32ea3a8ffb703015b6dce055b">00750</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00752"></a><a class="code" href="a00141.html#db78a1d28c9c966050e8a2926d834a33">00752</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00754"></a><a class="code" href="a00141.html#fff9cece89438587997ebedf93c5e962">00754</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00756"></a><a class="code" href="a00141.html#15181759c0bfa2ddce5d10c7550e0002">00756</a>     reference front() {
+<a name="l00757"></a>00757         __TBB_ASSERT( size()>0, NULL);
+<a name="l00758"></a>00758         <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
+<a name="l00759"></a>00759     }
+<a name="l00761"></a><a class="code" href="a00141.html#502615a858eb9fa0390ee59169065e90">00761</a>     const_reference front()<span class="keyword"> const </span>{
+<a name="l00762"></a>00762         __TBB_ASSERT( size()>0, NULL);
+<a name="l00763"></a>00763         <span class="keywordflow">return</span> static_cast<const T*>(my_segment[0].array)[0];
+<a name="l00764"></a>00764     }
+<a name="l00766"></a><a class="code" href="a00141.html#41ce48d6015a1a2812d41cf620ec3476">00766</a>     reference back() {
+<a name="l00767"></a>00767         __TBB_ASSERT( size()>0, NULL);
+<a name="l00768"></a>00768         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00769"></a>00769     }
+<a name="l00771"></a><a class="code" href="a00141.html#bd518e204107d07fd08d0ec5bdfd383d">00771</a>     const_reference back()<span class="keyword"> const </span>{
+<a name="l00772"></a>00772         __TBB_ASSERT( size()>0, NULL);
+<a name="l00773"></a>00773         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00774"></a>00774     }
+<a name="l00776"></a><a class="code" href="a00141.html#2fdba8e90de6a4d2300222236d46758e">00776</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00777"></a>00777 
+<a name="l00779"></a><a class="code" href="a00141.html#423e5aa15e0e3309ad86d026fd85f6f6">00779</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
+<a name="l00780"></a>00780         clear();
+<a name="l00781"></a>00781         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00782"></a>00782     }
+<a name="l00783"></a>00783 
+<a name="l00785"></a>00785     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00786"></a><a class="code" href="a00141.html#93a06b3112cb804f42f40efb5e7387b4">00786</a>     <span class="keywordtype">void</span> assign(I first, I last) {
+<a name="l00787"></a>00787         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00788"></a>00788     }
+<a name="l00789"></a>00789 
+<a name="l00791"></a><a class="code" href="a00141.html#96c9c4bd968ed3edb8dd276854d2dae0">00791</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00141.html">concurrent_vector</a> &vector) {
+<a name="l00792"></a>00792         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
+<a name="l00793"></a>00793             concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
+<a name="l00794"></a>00794             std::swap(this->my_allocator, vector.my_allocator);
+<a name="l00795"></a>00795         }
+<a name="l00796"></a>00796     }
+<a name="l00797"></a>00797 
+<a name="l00799"></a>00799 
+<a name="l00800"></a><a class="code" href="a00141.html#26f937a359a66b6aae904c3cd9a3c444">00800</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00801"></a>00801         internal_clear(&destroy_array);
+<a name="l00802"></a>00802     }
+<a name="l00803"></a>00803 
+<a name="l00805"></a><a class="code" href="a00141.html#da2444b28bb840d38f60d0030333a5fc">00805</a>     ~<a class="code" href="a00141.html">concurrent_vector</a>() {
+<a name="l00806"></a>00806         segment_t *table = my_segment;
+<a name="l00807"></a>00807         internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00808"></a>00808         <span class="comment">// base class destructor call should be then</span>
+<a name="l00809"></a>00809     }
+<a name="l00810"></a>00810 
+<a name="l00811"></a>00811     <span class="keyword">const</span> internal::concurrent_vector_base_v3 &internal_vector_base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
+<a name="l00812"></a>00812 <span class="keyword">private</span>:
+<a name="l00814"></a>00814     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
+<a name="l00815"></a>00815         <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
+<a name="l00816"></a>00816     }
+<a name="l00818"></a>00818     <span class="keywordtype">void</span> internal_free_segments(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block);
+<a name="l00819"></a>00819 
+<a name="l00821"></a>00821     T& internal_subscript( size_type index ) <span class="keyword">const</span>;
+<a name="l00822"></a>00822 
+<a name="l00824"></a>00824     T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
+<a name="l00825"></a>00825 
+<a name="l00827"></a>00827     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
+<a name="l00828"></a>00828         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );
+<a name="l00829"></a>00829     }
+<a name="l00830"></a>00830 
+<a name="l00832"></a>00832     <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
+<a name="l00833"></a>00833 
+<a name="l00835"></a>00835     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00836"></a>00836     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<true> *) {
+<a name="l00837"></a>00837         internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
+<a name="l00838"></a>00838     }
+<a name="l00840"></a>00840     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00841"></a>00841     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<false> *) {
+<a name="l00842"></a>00842         internal_assign_iterators(first, last);
+<a name="l00843"></a>00843     }
+<a name="l00845"></a>00845     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00846"></a>00846     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
+<a name="l00847"></a>00847 
+<a name="l00849"></a>00849     <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 );
+<a name="l00850"></a>00850 
+<a name="l00852"></a>00852     <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 );
+<a name="l00853"></a>00853 
+<a name="l00855"></a>00855     <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 );
+<a name="l00856"></a>00856 
+<a name="l00858"></a>00858     <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 );
+<a name="l00859"></a>00859 
+<a name="l00861"></a>00861     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC destroy_array( <span class="keywordtype">void</span>* begin, size_type n );
+<a name="l00862"></a>00862 
+<a name="l00864"></a>00864     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
+<a name="l00865"></a>00865     <span class="keyword">public</span>:
+<a name="l00866"></a>00866         <span class="keyword">const</span> pointer array;
+<a name="l00867"></a>00867         <span class="keyword">const</span> size_type n;
+<a name="l00868"></a>00868         size_type i;
+<a name="l00869"></a>00869         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
+<a name="l00870"></a>00870             : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
+<a name="l00871"></a>00871         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
+<a name="l00872"></a>00872         <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)); }
+<a name="l00873"></a>00873         <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]); }
+<a name="l00874"></a>00874         <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]; }
+<a name="l00875"></a>00875         <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 ); }
+<a name="l00876"></a>00876         ~internal_loop_guide() {
+<a name="l00877"></a>00877             <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
+<a name="l00878"></a>00878                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
+<a name="l00879"></a>00879         }
+<a name="l00880"></a>00880     };
+<a name="l00881"></a>00881 };
+<a name="l00882"></a>00882 
+<a name="l00883"></a>00883 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00884"></a><a class="code" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">00884</a> <span class="keywordtype">void</span> <a class="code" href="a00141.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
+<a name="l00885"></a>00885     internal_segments_table old;
+<a name="l00886"></a>00886     <span class="keywordflow">try</span> {
+<a name="l00887"></a>00887         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
+<a name="l00888"></a>00888             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
+<a name="l00889"></a>00889     } <span class="keywordflow">catch</span>(...) {
+<a name="l00890"></a>00890         <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>
+<a name="l00891"></a>00891             internal_free_segments( old.table, 1, old.first_block );
+<a name="l00892"></a>00892         <span class="keywordflow">throw</span>;
+<a name="l00893"></a>00893     }
+<a name="l00894"></a>00894 }
+<a name="l00895"></a>00895 
+<a name="l00896"></a>00896 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00897"></a>00897 <span class="keywordtype">void</span> <a class="code" href="a00141.html">concurrent_vector<T, A>::internal_free_segments</a>(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block) {
+<a name="l00898"></a>00898     <span class="comment">// Free the arrays</span>
+<a name="l00899"></a>00899     <span class="keywordflow">while</span>( k > first_block ) {
+<a name="l00900"></a>00900         --k;
+<a name="l00901"></a>00901         T* array = static_cast<T*>(table[k]);
+<a name="l00902"></a>00902         table[k] = NULL;
+<a name="l00903"></a>00903         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00904"></a>00904             this->my_allocator.deallocate( array, segment_size(k) );
+<a name="l00905"></a>00905     }
+<a name="l00906"></a>00906     T* array = static_cast<T*>(table[0]);
+<a name="l00907"></a>00907     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
+<a name="l00908"></a>00908         __TBB_ASSERT( first_block > 0, NULL );
+<a name="l00909"></a>00909         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
+<a name="l00910"></a>00910         this->my_allocator.deallocate( array, segment_size(first_block) );
+<a name="l00911"></a>00911     }
+<a name="l00912"></a>00912 }
+<a name="l00913"></a>00913 
+<a name="l00914"></a>00914 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00915"></a>00915 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
+<a name="l00916"></a>00916     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</span> );
+<a name="l00917"></a>00917     size_type j = index;
+<a name="l00918"></a>00918     segment_index_t k = segment_base_index_of( j );
+<a name="l00919"></a>00919     __TBB_ASSERT( my_segment != (segment_t*)my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00920"></a>00920     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
+<a name="l00921"></a>00921 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00922"></a>00922 <span class="preprocessor"></span>    T* array = static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array));
+<a name="l00923"></a>00923 <span class="preprocessor">#else</span>
+<a name="l00924"></a>00924 <span class="preprocessor"></span>    T* array = static_cast<T*>(my_segment[k].array);
+<a name="l00925"></a>00925 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00926"></a>00926     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
+<a name="l00927"></a>00927     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00928"></a>00928     <span class="keywordflow">return</span> array[j];
+<a name="l00929"></a>00929 }
+<a name="l00930"></a>00930 
+<a name="l00931"></a>00931 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00932"></a>00932 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
+<a name="l00933"></a>00933     <span class="keywordflow">if</span>( index >= my_early_size )
+<a name="l00934"></a>00934         internal::throw_exception(internal::eid_out_of_range); <span class="comment">// throw std::out_of_range</span>
+<a name="l00935"></a>00935     size_type j = index;
+<a name="l00936"></a>00936     segment_index_t k = segment_base_index_of( j );
+<a name="l00937"></a>00937     <span class="keywordflow">if</span>( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
+<a name="l00938"></a>00938         internal::throw_exception(internal::eid_segment_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00939"></a>00939     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
+<a name="l00940"></a>00940     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00941"></a>00941         internal::throw_exception(internal::eid_index_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00942"></a>00942     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
+<a name="l00943"></a>00943 }
+<a name="l00944"></a>00944 
+<a name="l00945"></a>00945 <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>
+<a name="l00946"></a>00946 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+<a name="l00947"></a>00947     __TBB_ASSERT(my_early_size == 0, NULL);
+<a name="l00948"></a>00948     size_type n = std::distance(first, last);
+<a name="l00949"></a>00949     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+<a name="l00950"></a>00950     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
+<a name="l00951"></a>00951     my_early_size = n;
+<a name="l00952"></a>00952     segment_index_t k = 0;
+<a name="l00953"></a>00953     size_type sz = segment_size( my_first_block );
+<a name="l00954"></a>00954     <span class="keywordflow">while</span>( sz < n ) {
+<a name="l00955"></a>00955         internal_loop_guide loop(sz, my_segment[k].array);
+<a name="l00956"></a>00956         loop.iterate(first);
+<a name="l00957"></a>00957         n -= sz;
+<a name="l00958"></a>00958         <span class="keywordflow">if</span>( !k ) k = my_first_block;
+<a name="l00959"></a>00959         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
+<a name="l00960"></a>00960     }
+<a name="l00961"></a>00961     internal_loop_guide loop(n, my_segment[k].array);
+<a name="l00962"></a>00962     loop.iterate(first);
+<a name="l00963"></a>00963 }
+<a name="l00964"></a>00964 
+<a name="l00965"></a>00965 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00966"></a>00966 <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 ) {
+<a name="l00967"></a>00967     internal_loop_guide loop(n, begin); loop.init();
+<a name="l00968"></a>00968 }
+<a name="l00969"></a>00969 
+<a name="l00970"></a>00970 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00971"></a>00971 <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 ) {
+<a name="l00972"></a>00972     internal_loop_guide loop(n, begin); loop.init(src);
+<a name="l00973"></a>00973 }
+<a name="l00974"></a>00974 
+<a name="l00975"></a>00975 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00976"></a>00976 <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 ) {
+<a name="l00977"></a>00977     internal_loop_guide loop(n, dst); loop.copy(src);
+<a name="l00978"></a>00978 }
+<a name="l00979"></a>00979 
+<a name="l00980"></a>00980 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00981"></a>00981 <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 ) {
+<a name="l00982"></a>00982     internal_loop_guide loop(n, dst); loop.assign(src);
+<a name="l00983"></a>00983 }
+<a name="l00984"></a>00984 
+<a name="l00985"></a>00985 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l00986"></a>00986 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
+<a name="l00987"></a>00987 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00988"></a>00988 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
+<a name="l00989"></a>00989 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00990"></a>00990 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00991"></a>00991 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
+<a name="l00992"></a>00992     T* array = static_cast<T*>(begin);
+<a name="l00993"></a>00993     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
+<a name="l00994"></a>00994         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
+<a name="l00995"></a>00995 }
+<a name="l00996"></a>00996 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+<a name="l00997"></a>00997 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00998"></a>00998 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
+<a name="l00999"></a>00999 <span class="preprocessor"></span>
+<a name="l01000"></a>01000 <span class="comment">// concurrent_vector's template functions</span>
+<a name="l01001"></a>01001 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01002"></a>01002 <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) {
+<a name="l01003"></a>01003     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
+<a name="l01004"></a>01004     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01005"></a>01005     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
+<a name="l01006"></a>01006     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
+<a name="l01007"></a>01007     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
+<a name="l01008"></a>01008         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01009"></a>01009     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01010"></a>01010 }
+<a name="l01011"></a>01011 
+<a name="l01012"></a>01012 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01013"></a>01013 <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)
+<a name="l01014"></a>01014 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01015"></a>01015 
+<a name="l01016"></a>01016 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01017"></a>01017 <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)
+<a name="l01018"></a>01018 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+<a name="l01019"></a>01019 
+<a name="l01020"></a>01020 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01021"></a>01021 <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)
+<a name="l01022"></a>01022 {    <span class="keywordflow">return</span> b < a; }
+<a name="l01023"></a>01023 
+<a name="l01024"></a>01024 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01025"></a>01025 <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)
+<a name="l01026"></a>01026 {    <span class="keywordflow">return</span> !(b < a); }
+<a name="l01027"></a>01027 
+<a name="l01028"></a>01028 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+<a name="l01029"></a>01029 <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)
+<a name="l01030"></a>01030 {    <span class="keywordflow">return</span> !(a < b); }
+<a name="l01031"></a>01031 
+<a name="l01032"></a>01032 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l01033"></a>01033 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
+<a name="l01034"></a>01034 {    a.swap( b ); }
+<a name="l01035"></a>01035 
+<a name="l01036"></a>01036 } <span class="comment">// namespace tbb</span>
+<a name="l01037"></a>01037 
+<a name="l01038"></a>01038 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+<a name="l01039"></a>01039 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01040"></a>01040 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
+<a name="l01041"></a>01041 <span class="preprocessor"></span>
+<a name="l01042"></a>01042 <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.
diff --git a/doc/html/a00300.html b/doc/html/a00300.html
deleted file mode 100644
index e5ab4bd..0000000
--- a/doc/html/a00300.html
+++ /dev/null
@@ -1,238 +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>mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_mutex_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
-<a name="l00028"></a>00028 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
-<a name="l00029"></a>00029 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <pthread.h></span>
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035 <span class="comment">// Use this internal TBB function to throw an exception</span>
-<a name="l00036"></a>00036 <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
-<a name="l00037"></a>00037 } } <span class="comment">//namespaces</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include <new></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">namespace </span>tbb {
-<a name="l00046"></a>00046 
-<a name="l00048"></a>00048 
-<a name="l00050"></a><a class="code" href="a00142.html">00050</a> <span class="keyword">class </span><a class="code" href="a00142.html">mutex</a> {
-<a name="l00051"></a>00051 <span class="keyword">public</span>:
-<a name="l00053"></a><a class="code" href="a00142.html#05313cb77d4f85213103d4dab74ed454">00053</a>     <a class="code" href="a00142.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
-<a name="l00054"></a>00054 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>    internal_construct();
-<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00059"></a>00059 <span class="preprocessor">  #else</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&impl,NULL);
-<a name="l00061"></a>00061         <span class="keywordflow">if</span>( error_code )
-<a name="l00062"></a>00062             tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
-<a name="l00063"></a>00063 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00065"></a>00065     };
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067     ~<a class="code" href="a00142.html">mutex</a>() {
-<a name="l00068"></a>00068 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00070"></a>00070 <span class="preprocessor">#else</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00073"></a>00073 <span class="preprocessor">  #else</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00077"></a>00077 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00078"></a>00078     };
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     <span class="keyword">class </span>scoped_lock;
-<a name="l00081"></a>00081     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00082"></a>00082 
-<a name="l00084"></a>00084 
-<a name="l00086"></a><a class="code" href="a00143.html">00086</a>     <span class="keyword">class </span><a class="code" href="a00143.html">scoped_lock</a> : internal::no_copy {
-<a name="l00087"></a>00087     <span class="keyword">public</span>:
-<a name="l00089"></a><a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">00089</a>         <a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00090"></a>00090 
-<a name="l00092"></a>00092 
-<a name="l00093"></a><a class="code" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">00093</a>         <a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00142.html">mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00094"></a>00094             <a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096 
-<a name="l00098"></a><a class="code" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">00098</a>         <a class="code" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
-<a name="l00099"></a>00099             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00100"></a>00100                 <a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
-<a name="l00101"></a>00101         }
-<a name="l00102"></a>00102 
-<a name="l00104"></a><a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">00104</a>         <span class="keywordtype">void</span> <a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00142.html">mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00105"></a>00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span>            internal_acquire(mutex);
-<a name="l00107"></a>00107 <span class="preprocessor">#else</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span>            mutex.<a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
-<a name="l00109"></a>00109             my_mutex = &mutex;
-<a name="l00110"></a>00110 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00111"></a>00111         }
-<a name="l00112"></a>00112 
-<a name="l00114"></a><a class="code" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">00114</a>         <span class="keywordtype">bool</span> <a class="code" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00142.html">mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00115"></a>00115 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
-<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
-<a name="l00119"></a>00119             <span class="keywordflow">if</span>( result )
-<a name="l00120"></a>00120                 my_mutex = &mutex;
-<a name="l00121"></a>00121             <span class="keywordflow">return</span> result;
-<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124 
-<a name="l00126"></a><a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">00126</a>         <span class="keywordtype">void</span> <a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
-<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>            internal_release ();
-<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
-<a name="l00131"></a>00131             my_mutex = NULL;
-<a name="l00132"></a>00132 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00133"></a>00133         }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="keyword">private</span>:
-<a name="l00137"></a>00137         <a class="code" href="a00142.html">mutex</a>* my_mutex;
-<a name="l00138"></a>00138 
-<a name="l00140"></a>00140         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00142.html">mutex</a>& m );
-<a name="l00141"></a>00141 
-<a name="l00143"></a>00143         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00142.html">mutex</a>& m );
-<a name="l00144"></a>00144 
-<a name="l00146"></a>00146         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00142.html">mutex</a>;
-<a name="l00149"></a>00149     };
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">// Mutex traits</span>
-<a name="l00152"></a>00152     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
-<a name="l00153"></a>00153     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-<a name="l00154"></a>00154     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="comment">// ISO C++0x compatibility methods</span>
-<a name="l00157"></a>00157 
-<a name="l00159"></a><a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">00159</a>     <span class="keywordtype">void</span> <a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
-<a name="l00160"></a>00160 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00162"></a>00162         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00143.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00163"></a>00163 <span class="preprocessor">#else</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00166"></a>00166 <span class="preprocessor">  #else</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00168"></a>00168 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171 
-<a name="l00173"></a>00173 
-<a name="l00174"></a><a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">00174</a>     <span class="keywordtype">bool</span> <a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
-<a name="l00175"></a>00175 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00177"></a>00177         <a class="code" href="a00143.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00178"></a>00178         s.<a class="code" href="a00143.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
-<a name="l00179"></a>00179         <span class="keywordflow">return</span> s.<a class="code" href="a00143.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
-<a name="l00180"></a>00180 <span class="preprocessor">#else</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00183"></a>00183 <span class="preprocessor">  #else</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00185"></a>00185 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 
-<a name="l00190"></a><a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">00190</a>     <span class="keywordtype">void</span> <a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
-<a name="l00191"></a>00191 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00193"></a>00193         <a class="code" href="a00143.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00194"></a>00194         s.<a class="code" href="a00143.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00195"></a>00195         s.<a class="code" href="a00143.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
-<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00199"></a>00199 <span class="preprocessor">  #else</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00201"></a>00201 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00202"></a>00202 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="keyword">private</span>:
-<a name="l00206"></a>00206 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00207"></a>00207 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
-<a name="l00208"></a>00208     <span class="keyword">enum</span> state_t {
-<a name="l00209"></a>00209         INITIALIZED=0x1234,
-<a name="l00210"></a>00210         DESTROYED=0x789A,
-<a name="l00211"></a>00211         HELD=0x56CD
-<a name="l00212"></a>00212     } state;
-<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00215"></a>00215 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00216"></a>00216 
-<a name="l00218"></a>00218     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00222"></a>00222 };
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 } <span class="comment">// namespace tbb </span>
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_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/a00302.html b/doc/html/a00302.html
index aa934cd..16170d5 100644
--- a/doc/html/a00302.html
+++ b/doc/html/a00302.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>null_mutex.h Source File</title>
+<title>critical_section.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>null_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>critical_section.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,37 +39,119 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_null_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_mutex_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _TBB_CRITICAL_SECTION_H_</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define _TBB_CRITICAL_SECTION_H_</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>tbb {
-<a name="l00025"></a>00025     
-<a name="l00027"></a>00027 
-<a name="l00029"></a><a class="code" href="a00144.html">00029</a> <span class="keyword">class </span><a class="code" href="a00144.html">null_mutex</a> {   
-<a name="l00031"></a>00031     <a class="code" href="a00144.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>& );   
-<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>& );   
-<a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00145.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00145.html">scoped_lock</a> {   
-<a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00145.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00145.html">scoped_lock</a>( <a class="code" href="a00144.html">null_mutex</a>& ) {}   
-<a name="l00039"></a>00039         ~<a class="code" href="a00145.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00144.html">null_mutex</a>& ) {}
-<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00144.html">null_mutex</a>& ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
-<a name="l00042"></a>00042         <span class="keywordtype">void</span> release() {}
-<a name="l00043"></a>00043     };
-<a name="l00044"></a>00044   
-<a name="l00045"></a>00045     <a class="code" href="a00144.html">null_mutex</a>() {}
-<a name="l00046"></a>00046     
-<a name="l00047"></a>00047     <span class="comment">// Mutex traits   </span>
-<a name="l00048"></a>00048     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;   
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
-<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
-<a name="l00051"></a>00051 };  
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_mutex_H */</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#else</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <errno.h></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#endif  // _WIN32||WIN64</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="keyword">namespace </span>tbb {
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     <span class="keyword">namespace </span>internal {
+<a name="l00040"></a>00040 <span class="keyword">class </span>critical_section_v4 : internal::no_copy {
+<a name="l00041"></a>00041 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>    CRITICAL_SECTION my_impl;
+<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>    pthread_mutex_t my_impl;
+<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>    tbb_thread::id my_tid;
+<a name="l00047"></a>00047 <span class="keyword">public</span>:
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051     critical_section_v4() { 
+<a name="l00052"></a>00052 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>        InitializeCriticalSection(&my_impl);
+<a name="l00054"></a>00054 <span class="preprocessor">#else</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>        pthread_mutex_init(&my_impl, NULL);
+<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>        internal_construct();
+<a name="l00058"></a>00058     }
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060     ~critical_section_v4() {
+<a name="l00061"></a>00061         __TBB_ASSERT(my_tid == tbb_thread::id(), <span class="stringliteral">"Destroying a still-held critical section"</span>);
+<a name="l00062"></a>00062 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>        DeleteCriticalSection(&my_impl); 
+<a name="l00064"></a>00064 <span class="preprocessor">#else</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>        pthread_mutex_destroy(&my_impl);
+<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>    }
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     <span class="keyword">class </span>scoped_lock : internal::no_copy {
+<a name="l00070"></a>00070     <span class="keyword">private</span>:
+<a name="l00071"></a>00071         critical_section_v4 &my_crit;
+<a name="l00072"></a>00072     <span class="keyword">public</span>:
+<a name="l00073"></a>00073         scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {
+<a name="l00074"></a>00074             my_crit.lock();
+<a name="l00075"></a>00075         }
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077         ~scoped_lock() {
+<a name="l00078"></a>00078             my_crit.unlock();
+<a name="l00079"></a>00079         }
+<a name="l00080"></a>00080     };
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082     <span class="keywordtype">void</span> lock() { 
+<a name="l00083"></a>00083         tbb_thread::id local_tid = this_tbb_thread::get_id();
+<a name="l00084"></a>00084         <span class="keywordflow">if</span>(local_tid == my_tid) throw_exception( eid_improper_lock );
+<a name="l00085"></a>00085 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span>        EnterCriticalSection( &my_impl );
+<a name="l00087"></a>00087 <span class="preprocessor">#else</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_lock(&my_impl);
+<a name="l00089"></a>00089         __TBB_ASSERT_EX(!rval, <span class="stringliteral">"critical_section::lock: pthread_mutex_lock failed"</span>);
+<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span>        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);
+<a name="l00092"></a>00092         my_tid = local_tid;
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095     <span class="keywordtype">bool</span> try_lock() {
+<a name="l00096"></a>00096         <span class="keywordtype">bool</span> gotlock;
+<a name="l00097"></a>00097         tbb_thread::id local_tid = this_tbb_thread::get_id();
+<a name="l00098"></a>00098         <span class="keywordflow">if</span>(local_tid == my_tid) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00099"></a>00099 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span>        gotlock = TryEnterCriticalSection( &my_impl ) != 0;
+<a name="l00101"></a>00101 <span class="preprocessor">#else</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_trylock(&my_impl);
+<a name="l00103"></a>00103         <span class="comment">// valid returns are 0 (locked) and [EBUSY]</span>
+<a name="l00104"></a>00104         __TBB_ASSERT(rval == 0 || rval == EBUSY, <span class="stringliteral">"critical_section::trylock: pthread_mutex_trylock failed"</span>);
+<a name="l00105"></a>00105         gotlock = rval == 0;
+<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span>        <span class="keywordflow">if</span>(gotlock)  {
+<a name="l00108"></a>00108             my_tid = local_tid;
+<a name="l00109"></a>00109         }
+<a name="l00110"></a>00110         <span class="keywordflow">return</span> gotlock;
+<a name="l00111"></a>00111     }
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113     <span class="keywordtype">void</span> unlock() {
+<a name="l00114"></a>00114         __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, <span class="stringliteral">"thread unlocking critical_section is not thread that locked it"</span>);
+<a name="l00115"></a>00115         my_tid = tbb_thread::id();
+<a name="l00116"></a>00116 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>        LeaveCriticalSection( &my_impl );
+<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>        <span class="keywordtype">int</span> rval = pthread_mutex_unlock(&my_impl);
+<a name="l00120"></a>00120         __TBB_ASSERT_EX(!rval, <span class="stringliteral">"critical_section::unlock: pthread_mutex_unlock failed"</span>);
+<a name="l00121"></a>00121 <span class="preprocessor">#endif</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>    }
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00125"></a>00125     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00126"></a>00126     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+<a name="l00127"></a>00127 }; <span class="comment">// critical_section_v4</span>
+<a name="l00128"></a>00128 } <span class="comment">// namespace internal</span>
+<a name="l00129"></a>00129 <span class="keyword">typedef</span> internal::critical_section_v4 critical_section;
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 __TBB_DEFINE_PROFILING_SET_NAME(critical_section)
+<a name="l00132"></a>00132 } <span class="comment">// namespace tbb</span>
+<a name="l00133"></a>00133 <span class="preprocessor">#endif  // _TBB_CRITICAL_SECTION_H_</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00304.html b/doc/html/a00304.html
deleted file mode 100644
index 74a1184..0000000
--- a/doc/html/a00304.html
+++ /dev/null
@@ -1,480 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_do.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_do_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_do_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <iterator></span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
-<a name="l00029"></a>00029 
-<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
-<a name="l00032"></a>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;
-<a name="l00033"></a>00033     <span class="keyword">template</span><<span class="keyword">typename</span> Body> <span class="keyword">class </span>do_group_task;
-<a name="l00034"></a>00034 
-<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00037"></a>00037     <span class="keyword">struct </span>strip { <span class="keyword">typedef</span> T type; };
-<a name="l00038"></a>00038     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00039"></a>00039     <span class="keyword">struct </span>strip<T&> { <span class="keyword">typedef</span> T type; };
-<a name="l00040"></a>00040     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00041"></a>00041     <span class="keyword">struct </span>strip<const T&> { <span class="keyword">typedef</span> T type; };
-<a name="l00042"></a>00042     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00043"></a>00043     <span class="keyword">struct </span>strip<volatile T&> { <span class="keyword">typedef</span> T type; };
-<a name="l00044"></a>00044     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00045"></a>00045     <span class="keyword">struct </span>strip<const volatile T&> { <span class="keyword">typedef</span> T type; };
-<a name="l00046"></a>00046     <span class="comment">// Most of the compilers remove cv-qualifiers from non-reference function argument types. </span>
-<a name="l00047"></a>00047     <span class="comment">// But unfortunately there are those that don't.</span>
-<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00049"></a>00049     <span class="keyword">struct </span>strip<const T> { <span class="keyword">typedef</span> T type; };
-<a name="l00050"></a>00050     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00051"></a>00051     <span class="keyword">struct </span>strip<volatile T> { <span class="keyword">typedef</span> T type; };
-<a name="l00052"></a>00052     <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00053"></a>00053     <span class="keyword">struct </span>strip<const volatile T> { <span class="keyword">typedef</span> T type; };
-<a name="l00054"></a>00054 } <span class="comment">// namespace internal</span>
-<a name="l00056"></a>00056 <span class="comment"></span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> Item>
-<a name="l00060"></a><a class="code" href="a00148.html">00060</a> <span class="keyword">class </span><a class="code" href="a00148.html">parallel_do_feeder</a>: internal::no_copy
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062     <a class="code" href="a00148.html">parallel_do_feeder</a>() {}
-<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00148.html">parallel_do_feeder</a> () {}
-<a name="l00064"></a>00064     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item ) = 0;
-<a name="l00065"></a>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>internal::parallel_do_feeder_impl;
-<a name="l00066"></a>00066 <span class="keyword">public</span>:
-<a name="l00068"></a><a class="code" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a>( <span class="keyword">const</span> Item& item ) {internal_add(item);}
-<a name="l00069"></a>00069 };
-<a name="l00070"></a>00070 
-<a name="l00072"></a>00072 <span class="keyword">namespace </span>internal {
-<a name="l00074"></a>00074 
-<a name="l00076"></a>00076     <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00077"></a>00077     <span class="keyword">class </span>parallel_do_operator_selector
-<a name="l00078"></a>00078     {
-<a name="l00079"></a>00079         <span class="keyword">typedef</span> parallel_do_feeder<Item> Feeder;
-<a name="l00080"></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 >
-<a name="l00081"></a>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> ) {
-<a name="l00082"></a>00082             obj(arg1);
-<a name="l00083"></a>00083         }
-<a name="l00084"></a>00084         <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
-<a name="l00085"></a>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, parallel_do_feeder<Item>&) <span class="keyword">const</span> ) {
-<a name="l00086"></a>00086             obj(arg1, arg2);
-<a name="l00087"></a>00087         }
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     <span class="keyword">public</span>:
-<a name="l00090"></a>00090         <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2 >
-<a name="l00091"></a>00091         <span class="keyword">static</span> <span class="keywordtype">void</span> call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2 )
-<a name="l00092"></a>00092         {
-<a name="l00093"></a>00093             internal_call( obj, arg1, arg2, &Body::operator() );
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095     };
-<a name="l00096"></a>00096 
-<a name="l00098"></a>00098 
-<a name="l00100"></a>00100     <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00101"></a>00101     <span class="keyword">class </span>do_iteration_task: <span class="keyword">public</span> task
-<a name="l00102"></a>00102     {
-<a name="l00103"></a>00103         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105         Item my_value;
-<a name="l00106"></a>00106         feeder_type& my_feeder;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108         do_iteration_task( <span class="keyword">const</span> Item& value, feeder_type& feeder ) : 
-<a name="l00109"></a>00109             my_value(value), my_feeder(feeder)
-<a name="l00110"></a>00110         {}
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112         <span class="comment">/*override*/</span> 
-<a name="l00113"></a>00113         task* execute()
-<a name="l00114"></a>00114         {
-<a name="l00115"></a>00115             parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, my_value, my_feeder);
-<a name="l00116"></a>00116             <span class="keywordflow">return</span> NULL;
-<a name="l00117"></a>00117         }
-<a name="l00118"></a>00118 
-<a name="l00119"></a>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>parallel_do_feeder_impl;
-<a name="l00120"></a>00120     }; <span class="comment">// class do_iteration_task</span>
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     <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="l00123"></a>00123     <span class="keyword">class </span>do_iteration_task_iter: <span class="keyword">public</span> task
-<a name="l00124"></a>00124     {
-<a name="l00125"></a>00125         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127         Iterator my_iter;
-<a name="l00128"></a>00128         feeder_type& my_feeder;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130         do_iteration_task_iter( <span class="keyword">const</span> Iterator& iter, feeder_type& feeder ) : 
-<a name="l00131"></a>00131             my_iter(iter), my_feeder(feeder)
-<a name="l00132"></a>00132         {}
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134         <span class="comment">/*override*/</span> 
-<a name="l00135"></a>00135         task* execute()
-<a name="l00136"></a>00136         {
-<a name="l00137"></a>00137             parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
-<a name="l00138"></a>00138             <span class="keywordflow">return</span> NULL;
-<a name="l00139"></a>00139         }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>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;    
-<a name="l00142"></a>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;    
-<a name="l00143"></a>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;    
-<a name="l00144"></a>00144     }; <span class="comment">// class do_iteration_task_iter</span>
-<a name="l00145"></a>00145 
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149     <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00150"></a>00150     <span class="keyword">class </span>parallel_do_feeder_impl : <span class="keyword">public</span> parallel_do_feeder<Item>
-<a name="l00151"></a>00151     {
-<a name="l00152"></a>00152         <span class="comment">/*override*/</span> 
-<a name="l00153"></a>00153         <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item )
-<a name="l00154"></a>00154         {
-<a name="l00155"></a>00155             <span class="keyword">typedef</span> do_iteration_task<Body, Item> iteration_type;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157             iteration_type& t = *<span class="keyword">new</span> (<a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().allocate_additional_child_of(*my_barrier)) iteration_type(item, *<span class="keyword">this</span>);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159             t.spawn( t );
-<a name="l00160"></a>00160         }
-<a name="l00161"></a>00161     <span class="keyword">public</span>:
-<a name="l00162"></a>00162         <span class="keyword">const</span> Body* my_body;
-<a name="l00163"></a>00163         empty_task* my_barrier;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165         parallel_do_feeder_impl()
-<a name="l00166"></a>00166         {
-<a name="l00167"></a>00167             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) empty_task();
-<a name="l00168"></a>00168             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
-<a name="l00169"></a>00169         }
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span>        parallel_do_feeder_impl(<a class="code" href="a00167.html">tbb::task_group_context</a> &context)
-<a name="l00173"></a>00173         {
-<a name="l00174"></a>00174             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(context) ) empty_task();
-<a name="l00175"></a>00175             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
-<a name="l00176"></a>00176         }
-<a name="l00177"></a>00177 <span class="preprocessor">#endif</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00179"></a>00179         ~parallel_do_feeder_impl()
-<a name="l00180"></a>00180         {
-<a name="l00181"></a>00181             my_barrier->destroy(*my_barrier);
-<a name="l00182"></a>00182         }
-<a name="l00183"></a>00183     }; <span class="comment">// class parallel_do_feeder_impl</span>
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187 
-<a name="l00190"></a>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>00191     <span class="keyword">class </span>do_group_task_forward: <span class="keyword">public</span> task
-<a name="l00192"></a>00192     {
-<a name="l00193"></a>00193         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197         feeder_type& my_feeder;
-<a name="l00198"></a>00198         Iterator my_first;
-<a name="l00199"></a>00199         size_t my_size;
-<a name="l00200"></a>00200         
-<a name="l00201"></a>00201         do_group_task_forward( Iterator first, size_t size, feeder_type& feeder ) 
-<a name="l00202"></a>00202             : my_feeder(feeder), my_first(first), my_size(size)
-<a name="l00203"></a>00203         {}
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205         <span class="comment">/*override*/</span> task* execute()
-<a name="l00206"></a>00206         {
-<a name="l00207"></a>00207             <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
-<a name="l00208"></a>00208             __TBB_ASSERT( my_size>0, NULL );
-<a name="l00209"></a>00209             task_list list;
-<a name="l00210"></a>00210             task* t; 
-<a name="l00211"></a>00211             size_t k=0; 
-<a name="l00212"></a>00212             <span class="keywordflow">for</span>(;;) {
-<a name="l00213"></a>00213                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_first, my_feeder );
-<a name="l00214"></a>00214                 ++my_first;
-<a name="l00215"></a>00215                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
-<a name="l00216"></a>00216                 list.push_back(*t);
-<a name="l00217"></a>00217             }
-<a name="l00218"></a>00218             set_ref_count(<span class="keywordtype">int</span>(k+1));
-<a name="l00219"></a>00219             spawn(list);
-<a name="l00220"></a>00220             spawn_and_wait_for_all(*t);
-<a name="l00221"></a>00221             <span class="keywordflow">return</span> NULL;
-<a name="l00222"></a>00222         }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>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>do_task_iter;
-<a name="l00225"></a>00225     }; <span class="comment">// class do_group_task_forward</span>
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00228"></a>00228     <span class="keyword">class </span>do_group_task_input: <span class="keyword">public</span> task
-<a name="l00229"></a>00229     {
-<a name="l00230"></a>00230         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
-<a name="l00231"></a>00231         
-<a name="l00232"></a>00232         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234         feeder_type& my_feeder;
-<a name="l00235"></a>00235         size_t my_size;
-<a name="l00236"></a>00236         aligned_space<Item, max_arg_size> my_arg;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238         do_group_task_input( feeder_type& feeder ) 
-<a name="l00239"></a>00239             : my_feeder(feeder), my_size(0)
-<a name="l00240"></a>00240         {}
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242         <span class="comment">/*override*/</span> task* execute()
-<a name="l00243"></a>00243         {
-<a name="l00244"></a>00244             <span class="keyword">typedef</span> do_iteration_task_iter<Item*, Body, Item> iteration_type;
-<a name="l00245"></a>00245             __TBB_ASSERT( my_size>0, NULL );
-<a name="l00246"></a>00246             task_list list;
-<a name="l00247"></a>00247             task* t; 
-<a name="l00248"></a>00248             size_t k=0; 
-<a name="l00249"></a>00249             <span class="keywordflow">for</span>(;;) {
-<a name="l00250"></a>00250                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );
-<a name="l00251"></a>00251                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
-<a name="l00252"></a>00252                 list.push_back(*t);
-<a name="l00253"></a>00253             }
-<a name="l00254"></a>00254             set_ref_count(<span class="keywordtype">int</span>(k+1));
-<a name="l00255"></a>00255             spawn(list);
-<a name="l00256"></a>00256             spawn_and_wait_for_all(*t);
-<a name="l00257"></a>00257             <span class="keywordflow">return</span> NULL;
-<a name="l00258"></a>00258         }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260         ~do_group_task_input(){
-<a name="l00261"></a>00261             <span class="keywordflow">for</span>( size_t k=0; k<my_size; ++k)
-<a name="l00262"></a>00262                 (my_arg.begin() + k)->~Item();
-<a name="l00263"></a>00263         }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>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;
-<a name="l00266"></a>00266     }; <span class="comment">// class do_group_task_input</span>
-<a name="l00267"></a>00267     
-<a name="l00269"></a>00269 
-<a name="l00271"></a>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>00272     <span class="keyword">class </span>do_task_iter: <span class="keyword">public</span> task
-<a name="l00273"></a>00273     {
-<a name="l00274"></a>00274         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="keyword">public</span>:
-<a name="l00277"></a>00277         do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) : 
-<a name="l00278"></a>00278             my_first(first), my_last(last), my_feeder(feeder)
-<a name="l00279"></a>00279         {}
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="keyword">private</span>:
-<a name="l00282"></a>00282         Iterator my_first;
-<a name="l00283"></a>00283         Iterator my_last;
-<a name="l00284"></a>00284         feeder_type& my_feeder;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286         <span class="comment">/* Do not merge run(xxx) and run_xxx() methods. They are separated in order</span>
-<a name="l00287"></a>00287 <span class="comment">            to make sure that compilers will eliminate unused argument of type xxx</span>
-<a name="l00288"></a>00288 <span class="comment">            (that is will not put it on stack). The sole purpose of this argument </span>
-<a name="l00289"></a>00289 <span class="comment">            is overload resolution.</span>
-<a name="l00290"></a>00290 <span class="comment">            </span>
-<a name="l00291"></a>00291 <span class="comment">            An alternative could be using template functions, but explicit specialization </span>
-<a name="l00292"></a>00292 <span class="comment">            of member function templates is not supported for non specialized class </span>
-<a name="l00293"></a>00293 <span class="comment">            templates. Besides template functions would always fall back to the least </span>
-<a name="l00294"></a>00294 <span class="comment">            efficient variant (the one for input iterators) in case of iterators having </span>
-<a name="l00295"></a>00295 <span class="comment">            custom tags derived from basic ones. */</span>
-<a name="l00296"></a>00296         <span class="comment">/*override*/</span> task* execute()
-<a name="l00297"></a>00297         {
-<a name="l00298"></a>00298             <span class="keyword">typedef</span> <span class="keyword">typename</span> std::iterator_traits<Iterator>::iterator_category iterator_tag;
-<a name="l00299"></a>00299             <span class="keywordflow">return</span> run( (iterator_tag*)NULL );
-<a name="l00300"></a>00300         }
-<a name="l00301"></a>00301 
-<a name="l00304"></a>00304         <span class="keyword">inline</span> task* run( <span class="keywordtype">void</span>* ) { <span class="keywordflow">return</span> run_for_input_iterator(); }
-<a name="l00305"></a>00305         
-<a name="l00306"></a>00306         task* run_for_input_iterator() {
-<a name="l00307"></a>00307             <span class="keyword">typedef</span> do_group_task_input<Body, Item> block_type;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309             block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
-<a name="l00310"></a>00310             size_t k=0; 
-<a name="l00311"></a>00311             <span class="keywordflow">while</span>( !(my_first == my_last) ) {
-<a name="l00312"></a>00312                 <span class="keyword">new</span> (t.my_arg.begin() + k) Item(*my_first);
-<a name="l00313"></a>00313                 ++my_first;
-<a name="l00314"></a>00314                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
-<a name="l00315"></a>00315                     <span class="keywordflow">if</span> ( !(my_first == my_last) )
-<a name="l00316"></a>00316                         recycle_to_reexecute();
-<a name="l00317"></a>00317                     <span class="keywordflow">break</span>;
-<a name="l00318"></a>00318                 }
-<a name="l00319"></a>00319             }
-<a name="l00320"></a>00320             <span class="keywordflow">if</span>( k==0 ) {
-<a name="l00321"></a>00321                 destroy(t);
-<a name="l00322"></a>00322                 <span class="keywordflow">return</span> NULL;
-<a name="l00323"></a>00323             } <span class="keywordflow">else</span> {
-<a name="l00324"></a>00324                 t.my_size = k;
-<a name="l00325"></a>00325                 <span class="keywordflow">return</span> &t;
-<a name="l00326"></a>00326             }
-<a name="l00327"></a>00327         }
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329         <span class="keyword">inline</span> task* run( std::forward_iterator_tag* ) { <span class="keywordflow">return</span> run_for_forward_iterator(); }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331         task* run_for_forward_iterator() {
-<a name="l00332"></a>00332             <span class="keyword">typedef</span> do_group_task_forward<Iterator, Body, Item> block_type;
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334             Iterator first = my_first;
-<a name="l00335"></a>00335             size_t k=0; 
-<a name="l00336"></a>00336             <span class="keywordflow">while</span>( !(my_first==my_last) ) {
-<a name="l00337"></a>00337                 ++my_first;
-<a name="l00338"></a>00338                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
-<a name="l00339"></a>00339                     <span class="keywordflow">if</span> ( !(my_first==my_last) )
-<a name="l00340"></a>00340                         recycle_to_reexecute();
-<a name="l00341"></a>00341                     <span class="keywordflow">break</span>;
-<a name="l00342"></a>00342                 }
-<a name="l00343"></a>00343             }
-<a name="l00344"></a>00344             <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);
-<a name="l00345"></a>00345         }
-<a name="l00346"></a>00346         
-<a name="l00347"></a>00347         <span class="keyword">inline</span> task* run( std::random_access_iterator_tag* ) { <span class="keywordflow">return</span> run_for_random_access_iterator(); }
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349         task* run_for_random_access_iterator() {
-<a name="l00350"></a>00350             <span class="keyword">typedef</span> do_group_task_forward<Iterator, Body, Item> block_type;
-<a name="l00351"></a>00351             <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
-<a name="l00352"></a>00352             
-<a name="l00353"></a>00353             size_t k = static_cast<size_t>(my_last-my_first); 
-<a name="l00354"></a>00354             <span class="keywordflow">if</span>( k > block_type::max_arg_size ) {
-<a name="l00355"></a>00355                 Iterator middle = my_first + k/2;
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357                 empty_task& c = *<span class="keyword">new</span>( allocate_continuation() ) empty_task;
-<a name="l00358"></a>00358                 do_task_iter& b = *<span class="keyword">new</span>( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);
-<a name="l00359"></a>00359                 recycle_as_child_of(c);
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361                 my_last = middle;
-<a name="l00362"></a>00362                 c.set_ref_count(2);
-<a name="l00363"></a>00363                 c.spawn(b);
-<a name="l00364"></a>00364                 <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00365"></a>00365             }<span class="keywordflow">else</span> <span class="keywordflow">if</span>( k != 0 ) {
-<a name="l00366"></a>00366                 task_list list;
-<a name="l00367"></a>00367                 task* t; 
-<a name="l00368"></a>00368                 size_t k1=0; 
-<a name="l00369"></a>00369                 <span class="keywordflow">for</span>(;;) {
-<a name="l00370"></a>00370                     t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_first, my_feeder);
-<a name="l00371"></a>00371                     ++my_first;
-<a name="l00372"></a>00372                     <span class="keywordflow">if</span>( ++k1==k ) <span class="keywordflow">break</span>;
-<a name="l00373"></a>00373                     list.push_back(*t);
-<a name="l00374"></a>00374                 }
-<a name="l00375"></a>00375                 set_ref_count(<span class="keywordtype">int</span>(k+1));
-<a name="l00376"></a>00376                 spawn(list);
-<a name="l00377"></a>00377                 spawn_and_wait_for_all(*t);
-<a name="l00378"></a>00378             }
-<a name="l00379"></a>00379             <span class="keywordflow">return</span> NULL;
-<a name="l00380"></a>00380         }
-<a name="l00381"></a>00381     }; <span class="comment">// class do_task_iter</span>
-<a name="l00382"></a>00382 
-<a name="l00384"></a>00384 
-<a name="l00386"></a>00386     <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="l00387"></a>00387     <span class="keywordtype">void</span> run_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body& body
-<a name="l00388"></a>00388 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
-<a name="l00389"></a>00389         , task_group_context& context
-<a name="l00390"></a>00390 #endif
-<a name="l00391"></a>00391         )
-<a name="l00392"></a>00392     {
-<a name="l00393"></a>00393         <span class="keyword">typedef</span> do_task_iter<Iterator, Body, Item> root_iteration_task;
-<a name="l00394"></a>00394 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00395"></a>00395 <span class="preprocessor"></span>        parallel_do_feeder_impl<Body, Item> feeder(context);
-<a name="l00396"></a>00396 <span class="preprocessor">#else</span>
-<a name="l00397"></a>00397 <span class="preprocessor"></span>        parallel_do_feeder_impl<Body, Item> feeder;
-<a name="l00398"></a>00398 <span class="preprocessor">#endif</span>
-<a name="l00399"></a>00399 <span class="preprocessor"></span>        feeder.my_body = &body;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401         root_iteration_task &t = *<span class="keyword">new</span>( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403         feeder.my_barrier->set_ref_count(2);
-<a name="l00404"></a>00404         feeder.my_barrier->spawn_and_wait_for_all(t);
-<a name="l00405"></a>00405     }
-<a name="l00406"></a>00406 
-<a name="l00408"></a>00408 
-<a name="l00410"></a>00410     <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="l00411"></a>00411     <span class="keywordtype">void</span> select_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item) <span class="keyword">const</span>
-<a name="l00412"></a>00412 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
-<a name="l00413"></a>00413         , task_group_context& context 
-<a name="l00414"></a>00414 #endif <span class="comment">// __TBB_EXCEPTIONS </span>
-<a name="l00415"></a>00415         )
-<a name="l00416"></a>00416     {
-<a name="l00417"></a>00417         run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
-<a name="l00418"></a>00418 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00419"></a>00419 <span class="preprocessor"></span>            , context
-<a name="l00420"></a>00420 <span class="preprocessor">#endif // __TBB_EXCEPTIONS </span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span>            );
-<a name="l00422"></a>00422     }
-<a name="l00423"></a>00423 
-<a name="l00425"></a>00425 
-<a name="l00427"></a>00427     <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="l00428"></a>00428     <span class="keywordtype">void</span> select_parallel_do( 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>
-<a name="l00429"></a>00429 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
-<a name="l00430"></a>00430         , task_group_context& context 
-<a name="l00431"></a>00431 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
-<a name="l00432"></a>00432         )
-<a name="l00433"></a>00433     {
-<a name="l00434"></a>00434         run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
-<a name="l00435"></a>00435 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span>            , context
-<a name="l00437"></a>00437 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
-<a name="l00438"></a>00438 <span class="preprocessor"></span>            );
-<a name="l00439"></a>00439     }
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441 } <span class="comment">// namespace internal</span>
-<a name="l00443"></a>00443 <span class="comment"></span>
-<a name="l00444"></a>00444 
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body> 
-<a name="l00470"></a><a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body )
-<a name="l00471"></a>00471 {
-<a name="l00472"></a>00472     <span class="keywordflow">if</span> ( first == last )
-<a name="l00473"></a>00473         <span class="keywordflow">return</span>;
-<a name="l00474"></a>00474 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span>    <a class="code" href="a00167.html">task_group_context</a> context;
-<a name="l00476"></a>00476 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span>    internal::select_parallel_do( first, last, body, &Body::operator()
-<a name="l00478"></a>00478 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
-<a name="l00479"></a>00479         , context
-<a name="l00480"></a>00480 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
-<a name="l00481"></a>00481         );
-<a name="l00482"></a>00482 }
-<a name="l00483"></a>00483 
-<a name="l00484"></a>00484 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00486"></a>00486 <span class="preprocessor"></span>
-<a name="l00487"></a>00487 <span class="preprocessor">template<typename Iterator, typename Body> </span>
-<a name="l00488"></a><a class="code" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00167.html">task_group_context</a>& context  )
-<a name="l00489"></a>00489 {
-<a name="l00490"></a>00490     <span class="keywordflow">if</span> ( first == last )
-<a name="l00491"></a>00491         <span class="keywordflow">return</span>;
-<a name="l00492"></a>00492     internal::select_parallel_do( first, last, body, &Body::operator(), context );
-<a name="l00493"></a>00493 }
-<a name="l00494"></a>00494 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span>
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 } <span class="comment">// namespace </span>
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 <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/a00292.html b/doc/html/a00305.html
similarity index 94%
copy from doc/html/a00292.html
copy to doc/html/a00305.html
index 3eb0687..75042b8 100644
--- a/doc/html/a00292.html
+++ b/doc/html/a00305.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>enumerable_thread_specific.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -58,7 +58,7 @@
 <a name="l00037"></a>00037 <span class="preprocessor"></span>
 <a name="l00038"></a>00038 <span class="keyword">namespace </span>tbb {
 <a name="l00039"></a>00039 
-<a name="l00041"></a><a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">00041</a>     <span class="keyword">enum</span> <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
+<a name="l00041"></a><a class="code" href="a00237.html#a8622ae61b7e7737dac26542e181178e">00041</a>     <span class="keyword">enum</span> <a class="code" href="a00237.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
 <a name="l00042"></a>00042 
 <a name="l00044"></a>00044     <span class="keyword">namespace </span>internal {
 <a name="l00045"></a>00045         
@@ -428,7 +428,7 @@
 <a name="l00416"></a>00416             <span class="keyword">typedef</span> Functor my_callback_type;
 <a name="l00417"></a>00417             <span class="keyword">typedef</span> callback_leaf<T,Functor> my_type;
 <a name="l00418"></a>00418             <span class="keyword">typedef</span> my_type* callback_pointer;
-<a name="l00419"></a>00419             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator<my_type></a> my_allocator_type;
+<a name="l00419"></a>00419             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00178.html">tbb::tbb_allocator<my_type></a> my_allocator_type;
 <a name="l00420"></a>00420             Functor f;
 <a name="l00421"></a>00421             callback_leaf( <span class="keyword">const</span> Functor& f_) : f(f_) {
 <a name="l00422"></a>00422             }
@@ -454,7 +454,7 @@
 <a name="l00442"></a>00442         <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HC, <span class="keyword">typename</span> A>
 <a name="l00443"></a>00443         <span class="keyword">class </span>ets_concurrent_hash_map : <span class="keyword">public</span> tbb::concurrent_hash_map<Key, T, HC, A> {
 <a name="l00444"></a>00444         <span class="keyword">public</span>:
-<a name="l00445"></a>00445             <span class="keyword">typedef</span> <a class="code" href="a00130.html">tbb::concurrent_hash_map<Key, T, HC, A></a> base_type;
+<a name="l00445"></a>00445             <span class="keyword">typedef</span> <a class="code" href="a00135.html">tbb::concurrent_hash_map<Key, T, HC, A></a> base_type;
 <a name="l00446"></a>00446             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
 <a name="l00447"></a>00447             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::key_type key_type;
 <a name="l00448"></a>00448             const_pointer find( <span class="keyword">const</span> key_type &k ) {
@@ -466,10 +466,10 @@
 <a name="l00455"></a>00455 <span class="comment"></span>
 <a name="l00457"></a>00457     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
 <a name="l00458"></a>00458               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
-<a name="l00459"></a><a class="code" href="a00138.html">00459</a>               <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
-<a name="l00460"></a>00460     <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a> { 
+<a name="l00459"></a><a class="code" href="a00143.html">00459</a>               <a class="code" href="a00237.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
+<a name="l00460"></a>00460     <span class="keyword">class </span><a class="code" href="a00143.html">enumerable_thread_specific</a> { 
 <a name="l00461"></a>00461 
-<a name="l00462"></a>00462         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A, ets_key_usage_type C> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a>;
+<a name="l00462"></a>00462         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A, ets_key_usage_type C> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00143.html">enumerable_thread_specific</a>;
 <a name="l00463"></a>00463     
 <a name="l00464"></a>00464         <span class="keyword">typedef</span> internal::tls_manager< ETS_key_type > my_tls_manager;
 <a name="l00465"></a>00465 
@@ -482,21 +482,21 @@
 <a name="l00473"></a>00473         };
 <a name="l00474"></a>00474     
 <a name="l00476"></a>00476         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00477"></a>00477         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00122.html">blocked_range</a><I> {
+<a name="l00477"></a>00477         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00127.html">blocked_range</a><I> {
 <a name="l00478"></a>00478         <span class="keyword">public</span>:
 <a name="l00479"></a>00479             <span class="keyword">typedef</span> T value_type;
 <a name="l00480"></a>00480             <span class="keyword">typedef</span> T& reference;
 <a name="l00481"></a>00481             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
 <a name="l00482"></a>00482             <span class="keyword">typedef</span> I iterator;
 <a name="l00483"></a>00483             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00484"></a>00484             generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00122.html">blocked_range<I></a>(begin_,end_,grainsize) {} 
+<a name="l00484"></a>00484             generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00127.html">blocked_range<I></a>(begin_,end_,grainsize) {} 
 <a name="l00485"></a>00485             template<typename U>
-<a name="l00486"></a>00486             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00122.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00487"></a>00487             generic_range_type( generic_range_type& r, <a class="code" href="a00165.html">split</a> ) : <a class="code" href="a00122.html">blocked_range<I></a>(r,<a class="code" href="a00165.html">split</a>()) {}
+<a name="l00486"></a>00486             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00127.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00487"></a>00487             generic_range_type( generic_range_type& r, <a class="code" href="a00173.html">split</a> ) : <a class="code" href="a00127.html">blocked_range<I></a>(r,<a class="code" href="a00173.html">split</a>()) {}
 <a name="l00488"></a>00488         };
 <a name="l00489"></a>00489     
 <a name="l00490"></a>00490         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element<T> >::other padded_allocator_type;
-<a name="l00491"></a>00491         <span class="keyword">typedef</span> <a class="code" href="a00136.html">tbb::concurrent_vector< padded_element<T></a>, padded_allocator_type > <a class="code" href="a00136.html">internal_collection_type</a>;
+<a name="l00491"></a>00491         <span class="keyword">typedef</span> <a class="code" href="a00141.html">tbb::concurrent_vector< padded_element<T></a>, padded_allocator_type > <a class="code" href="a00141.html">internal_collection_type</a>;
 <a name="l00492"></a>00492         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type hash_table_index_type; <span class="comment">// storing array indices rather than iterators to simplify</span>
 <a name="l00493"></a>00493         <span class="comment">// copying the hash table that correlates thread IDs with concurrent vector elements.</span>
 <a name="l00494"></a>00494         
@@ -516,7 +516,7 @@
 <a name="l00508"></a>00508         <span class="comment">// using tbb_allocator instead of padded_element_allocator because we may be</span>
 <a name="l00509"></a>00509         <span class="comment">// copying an exemplar from one instantiation of ETS to another with a different</span>
 <a name="l00510"></a>00510         <span class="comment">// allocator.</span>
-<a name="l00511"></a>00511         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator<padded_element<T></a> > <a class="code" href="a00170.html">exemplar_allocator_type</a>;
+<a name="l00511"></a>00511         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00178.html">tbb::tbb_allocator<padded_element<T></a> > <a class="code" href="a00178.html">exemplar_allocator_type</a>;
 <a name="l00512"></a>00512         <span class="keyword">static</span> padded_element<T> * create_exemplar(<span class="keyword">const</span> T& my_value) {
 <a name="l00513"></a>00513             padded_element<T> *new_exemplar = 0;
 <a name="l00514"></a>00514             <span class="comment">// void *new_space = padded_allocator_type().allocate(1);</span>
@@ -546,7 +546,7 @@
 <a name="l00538"></a>00538     
 <a name="l00539"></a>00539     <span class="keyword">public</span>:
 <a name="l00540"></a>00540     
-<a name="l00542"></a>00542         <span class="keyword">typedef</span> Allocator <a class="code" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a>;
+<a name="l00542"></a>00542         <span class="keyword">typedef</span> Allocator <a class="code" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a>;
 <a name="l00543"></a>00543         <span class="keyword">typedef</span> T value_type;
 <a name="l00544"></a>00544         <span class="keyword">typedef</span> T& reference;
 <a name="l00545"></a>00545         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
@@ -563,26 +563,26 @@
 <a name="l00556"></a>00556         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
 <a name="l00557"></a>00557         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
 <a name="l00558"></a>00558     
-<a name="l00560"></a>00560         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>() : my_finit_callback(0) { 
+<a name="l00560"></a>00560         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>() : my_finit_callback(0) { 
 <a name="l00561"></a>00561             my_exemplar_ptr = create_exemplar();
 <a name="l00562"></a>00562             my_tls_manager::create_key(my_key); 
 <a name="l00563"></a>00563         }
 <a name="l00564"></a>00564 
 <a name="l00566"></a>00566         <span class="comment">// Finit should be a function taking 0 parameters and returning a T</span>
-<a name="l00567"></a><a class="code" href="a00138.html#e5698930b84c098bb6d87175b8b50306">00567</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
-<a name="l00568"></a>00568         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( Finit _finit )
+<a name="l00567"></a><a class="code" href="a00143.html#e5698930b84c098bb6d87175b8b50306">00567</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
+<a name="l00568"></a>00568         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( Finit _finit )
 <a name="l00569"></a>00569         {
 <a name="l00570"></a>00570             my_finit_callback = internal::callback_leaf<T,Finit>::new_callback( _finit );
 <a name="l00571"></a>00571             my_tls_manager::create_key(my_key);
 <a name="l00572"></a>00572             my_exemplar_ptr = 0; <span class="comment">// don't need exemplar if function is provided</span>
 <a name="l00573"></a>00573         }
 <a name="l00574"></a>00574     
-<a name="l00576"></a>00576         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>(<span class="keyword">const</span> T &_exemplar) : my_finit_callback(0) {
+<a name="l00576"></a>00576         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>(<span class="keyword">const</span> T &_exemplar) : my_finit_callback(0) {
 <a name="l00577"></a>00577             my_exemplar_ptr = create_exemplar(_exemplar);
 <a name="l00578"></a>00578             my_tls_manager::create_key(my_key); 
 <a name="l00579"></a>00579         }
 <a name="l00580"></a>00580     
-<a name="l00582"></a>00582         <a class="code" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>() { 
+<a name="l00582"></a>00582         <a class="code" href="a00143.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>() { 
 <a name="l00583"></a>00583             my_tls_manager::destroy_key(my_key); 
 <a name="l00584"></a>00584             <span class="keywordflow">if</span>(my_finit_callback) {
 <a name="l00585"></a>00585                 my_finit_callback->destroy();
@@ -593,12 +593,12 @@
 <a name="l00590"></a>00590             }
 <a name="l00591"></a>00591         }
 <a name="l00592"></a>00592       
-<a name="l00594"></a>00594         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>() {
+<a name="l00594"></a>00594         reference <a class="code" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>() {
 <a name="l00595"></a>00595             <span class="keywordtype">bool</span> exists;
-<a name="l00596"></a>00596             <span class="keywordflow">return</span> <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(exists);
+<a name="l00596"></a>00596             <span class="keywordflow">return</span> <a class="code" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>(exists);
 <a name="l00597"></a>00597         }
 <a name="l00598"></a>00598 
-<a name="l00600"></a>00600         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(<span class="keywordtype">bool</span>& exists)  {
+<a name="l00600"></a>00600         reference <a class="code" href="a00143.html#ceb691814a0001241c43595d309cf615">local</a>(<span class="keywordtype">bool</span>& exists)  {
 <a name="l00601"></a>00601             <span class="keywordflow">if</span> ( pointer local_ptr = static_cast<pointer>(my_tls_manager::get_tls(my_key)) ) {
 <a name="l00602"></a>00602                 exists = <span class="keyword">true</span>;
 <a name="l00603"></a>00603                <span class="keywordflow">return</span> *local_ptr;
@@ -626,17 +626,17 @@
 <a name="l00625"></a>00625                         <span class="keywordflow">if</span>(my_finit_callback) {
 <a name="l00626"></a>00626                             <span class="comment">// convert iterator to array index</span>
 <a name="l00627"></a>00627 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00628"></a>00628 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply());
+<a name="l00628"></a>00628 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply());
 <a name="l00629"></a>00629 <span class="preprocessor">#else</span>
-<a name="l00630"></a>00630 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply()) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
+<a name="l00630"></a>00630 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback->apply()) - my_locals.<a class="code" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
 <a name="l00631"></a>00631 <span class="preprocessor">#endif</span>
 <a name="l00632"></a>00632 <span class="preprocessor"></span>                        }
 <a name="l00633"></a>00633                         <span class="keywordflow">else</span> {
 <a name="l00634"></a>00634                             <span class="comment">// convert iterator to array index</span>
 <a name="l00635"></a>00635 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00636"></a>00636 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr);
+<a name="l00636"></a>00636 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr);
 <a name="l00637"></a>00637 <span class="preprocessor">#else</span>
-<a name="l00638"></a>00638 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
+<a name="l00638"></a>00638 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr) - my_locals.<a class="code" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
 <a name="l00639"></a>00639 <span class="preprocessor">#endif</span>
 <a name="l00640"></a>00640 <span class="preprocessor"></span>                        }
 <a name="l00641"></a>00641                         <span class="comment">// insert into hash table</span>
@@ -650,23 +650,23 @@
 <a name="l00649"></a>00649             <span class="keywordflow">return</span> local_ref;
 <a name="l00650"></a>00650         } <span class="comment">// local</span>
 <a name="l00651"></a>00651 
-<a name="l00653"></a>00653         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
+<a name="l00653"></a>00653         size_type <a class="code" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
 <a name="l00654"></a>00654     
-<a name="l00656"></a>00656         <span class="keywordtype">bool</span> <a class="code" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
+<a name="l00656"></a>00656         <span class="keywordtype">bool</span> <a class="code" href="a00143.html#ad23345a722622199deaa4dfd243d9f8">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
 <a name="l00657"></a>00657     
-<a name="l00659"></a>00659         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
-<a name="l00661"></a>00661         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
+<a name="l00659"></a>00659         iterator <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
+<a name="l00661"></a>00661         iterator <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
 <a name="l00662"></a>00662     
-<a name="l00664"></a>00664         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
+<a name="l00664"></a>00664         const_iterator <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
 <a name="l00665"></a>00665     
-<a name="l00667"></a>00667         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
+<a name="l00667"></a>00667         const_iterator <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
 <a name="l00668"></a>00668 
-<a name="l00670"></a>00670         range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); } 
+<a name="l00670"></a>00670         range_type <a class="code" href="a00143.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); } 
 <a name="l00671"></a>00671         
-<a name="l00673"></a>00673         const_range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); }
+<a name="l00673"></a>00673         const_range_type <a class="code" href="a00143.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); }
 <a name="l00674"></a>00674     
-<a name="l00676"></a>00676         <span class="keywordtype">void</span> <a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>() {
-<a name="l00677"></a>00677             my_locals.<a class="code" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
+<a name="l00676"></a>00676         <span class="keywordtype">void</span> <a class="code" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>() {
+<a name="l00677"></a>00677             my_locals.<a class="code" href="a00141.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
 <a name="l00678"></a>00678             my_hash_tbl.clear();
 <a name="l00679"></a>00679             reset_key();
 <a name="l00680"></a>00680             <span class="comment">// callback is not destroyed</span>
@@ -681,9 +681,9 @@
 <a name="l00689"></a>00689         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
 <a name="l00690"></a>00690         <span class="keywordtype">void</span>
 <a name="l00691"></a>00691         internal_copy_construct( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00692"></a>00692             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
+<a name="l00692"></a>00692             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00143.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
 <a name="l00693"></a>00693             <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
-<a name="l00694"></a>00694                 my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
+<a name="l00694"></a>00694                 my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
 <a name="l00695"></a>00695             }
 <a name="l00696"></a>00696             <span class="keywordflow">if</span>(other.my_finit_callback) {
 <a name="l00697"></a>00697                 my_finit_callback = other.my_finit_callback->make_copy();
@@ -703,13 +703,13 @@
 <a name="l00711"></a>00711     <span class="keyword">public</span>:
 <a name="l00712"></a>00712 
 <a name="l00713"></a>00713         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00714"></a>00714         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : my_hash_tbl(other.my_hash_tbl) 
+<a name="l00714"></a>00714         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : my_hash_tbl(other.my_hash_tbl) 
 <a name="l00715"></a>00715         {   <span class="comment">// Have to do push_back because the contained elements are not necessarily assignable.</span>
 <a name="l00716"></a>00716             internal_copy_construct(other);
 <a name="l00717"></a>00717         }
 <a name="l00718"></a>00718 
 <a name="l00719"></a>00719         <span class="comment">// non-templatized version</span>
-<a name="l00720"></a>00720         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other ) : my_hash_tbl(other.my_hash_tbl) 
+<a name="l00720"></a>00720         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other ) : my_hash_tbl(other.my_hash_tbl) 
 <a name="l00721"></a>00721         {
 <a name="l00722"></a>00722             internal_copy_construct(other);
 <a name="l00723"></a>00723         }
@@ -717,15 +717,15 @@
 <a name="l00725"></a>00725     <span class="keyword">private</span>:
 <a name="l00726"></a>00726 
 <a name="l00727"></a>00727         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00728"></a>00728         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> &
+<a name="l00728"></a>00728         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> &
 <a name="l00729"></a>00729         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00730"></a>00730             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
+<a name="l00730"></a>00730             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00143.html">tbb::enumerable_thread_specific<U, A2, C2></a> other_type;
 <a name="l00731"></a>00731             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
-<a name="l00732"></a>00732                 this-><a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); <span class="comment">// resets TLS key</span>
+<a name="l00732"></a>00732                 this-><a class="code" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); <span class="comment">// resets TLS key</span>
 <a name="l00733"></a>00733                 my_hash_tbl = other.my_hash_tbl;
 <a name="l00734"></a>00734                 <span class="comment">// cannot use assign because T may not be assignable.</span>
 <a name="l00735"></a>00735                 <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
-<a name="l00736"></a>00736                     my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
+<a name="l00736"></a>00736                     my_locals.<a class="code" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
 <a name="l00737"></a>00737                 }
 <a name="l00738"></a>00738 
 <a name="l00739"></a>00739                 <span class="keywordflow">if</span>(my_finit_callback) {
@@ -750,12 +750,12 @@
 <a name="l00758"></a>00758     <span class="keyword">public</span>:
 <a name="l00759"></a>00759 
 <a name="l00760"></a>00760         <span class="comment">// assignment</span>
-<a name="l00761"></a>00761         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other) {
+<a name="l00761"></a>00761         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& other) {
 <a name="l00762"></a>00762             <span class="keywordflow">return</span> internal_assign(other);
 <a name="l00763"></a>00763         }
 <a name="l00764"></a>00764 
 <a name="l00765"></a>00765         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00766"></a>00766         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
+<a name="l00766"></a>00766         <a class="code" href="a00143.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
 <a name="l00767"></a>00767         {
 <a name="l00768"></a>00768             <span class="keywordflow">return</span> internal_assign(other);
 <a name="l00769"></a>00769         }
@@ -782,20 +782,20 @@
 <a name="l00790"></a>00790         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
 <a name="l00791"></a>00791         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
 <a name="l00792"></a>00792         T combine(combine_func_t f_combine) {
-<a name="l00793"></a>00793             <span class="keywordflow">if</span>(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>() == my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()) {
+<a name="l00793"></a>00793             <span class="keywordflow">if</span>(my_locals.<a class="code" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a>() == my_locals.<a class="code" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()) {
 <a name="l00794"></a>00794                 <span class="keywordflow">if</span>(my_finit_callback) {
 <a name="l00795"></a>00795                     <span class="keywordflow">return</span> my_finit_callback->apply();
 <a name="l00796"></a>00796                 }
 <a name="l00797"></a>00797                 <span class="keywordflow">return</span> (*my_exemplar_ptr).value;
 <a name="l00798"></a>00798             }
-<a name="l00799"></a>00799             <span class="keyword">typename</span> internal_collection_type::const_range_type r(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(), my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(), (size_t)2);
+<a name="l00799"></a>00799             <span class="keyword">typename</span> internal_collection_type::const_range_type r(my_locals.<a class="code" href="a00141.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(), my_locals.<a class="code" href="a00141.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(), (size_t)2);
 <a name="l00800"></a>00800             <span class="keywordflow">return</span> internal_combine(r, f_combine);
 <a name="l00801"></a>00801         }
 <a name="l00802"></a>00802 
 <a name="l00803"></a>00803         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
 <a name="l00804"></a>00804         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
 <a name="l00805"></a>00805         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
-<a name="l00806"></a>00806             <span class="keywordflow">for</span>(const_iterator ci = <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(); ci != <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(); ++ci) {
+<a name="l00806"></a>00806             <span class="keywordflow">for</span>(const_iterator ci = <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>(); ci != <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(); ++ci) {
 <a name="l00807"></a>00807                 f_combine( *ci );
 <a name="l00808"></a>00808             }
 <a name="l00809"></a>00809         }
@@ -825,14 +825,14 @@
 <a name="l00834"></a>00834             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
 <a name="l00835"></a>00835 
 <a name="l00836"></a>00836         flattened2d( <span class="keyword">const</span> Container &c ) : 
-<a name="l00837"></a>00837             my_container(const_cast<Container*>(&c)), my_begin(c.<a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()), my_end(c.<a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()) { }
+<a name="l00837"></a>00837             my_container(const_cast<Container*>(&c)), my_begin(c.<a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>()), my_end(c.<a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()) { }
 <a name="l00838"></a>00838 
-<a name="l00839"></a>00839         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
-<a name="l00840"></a>00840         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
-<a name="l00841"></a>00841         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
-<a name="l00842"></a>00842         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
+<a name="l00839"></a>00839         iterator <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
+<a name="l00840"></a>00840         iterator <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
+<a name="l00841"></a>00841         const_iterator <a class="code" href="a00143.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
+<a name="l00842"></a>00842         const_iterator <a class="code" href="a00143.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
 <a name="l00843"></a>00843 
-<a name="l00844"></a>00844         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{
+<a name="l00844"></a>00844         size_type <a class="code" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{
 <a name="l00845"></a>00845             size_type tot_size = 0;
 <a name="l00846"></a>00846             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
 <a name="l00847"></a>00847                 tot_size += i->size();
diff --git a/doc/html/a00313.html b/doc/html/a00313.html
index 4bd12ad..2609e5f 100644
--- a/doc/html/a00313.html
+++ b/doc/html/a00313.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_for.h Source File</title>
+<title>mutex.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>parallel_for.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,191 +39,194 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_mutex_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <stdexcept></span> <span class="comment">// std::invalid_argument</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <string></span> <span class="comment">// std::invalid_argument text</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
-<a name="l00032"></a>00032 
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038     <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="l00039"></a>00039     <span class="keyword">class </span>start_for: <span class="keyword">public</span> task {
-<a name="l00040"></a>00040         Range my_range;
-<a name="l00041"></a>00041         <span class="keyword">const</span> Body my_body;
-<a name="l00042"></a>00042         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-<a name="l00043"></a>00043         <span class="comment">/*override*/</span> task* execute();
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
+<a name="l00028"></a>00028 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
+<a name="l00029"></a>00029 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include <pthread.h></span>
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035 <span class="comment">// Use this internal TBB function to throw an exception</span>
+<a name="l00036"></a>00036 <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
+<a name="l00037"></a>00037 } } <span class="comment">//namespaces</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040 <span class="preprocessor">#include <new></span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "tbb_profiling.h"</span>
 <a name="l00044"></a>00044 
-<a name="l00046"></a>00046         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
-<a name="l00047"></a>00047             my_range(range),    
-<a name="l00048"></a>00048             my_body(body),
-<a name="l00049"></a>00049             my_partition(partitioner)
-<a name="l00050"></a>00050         {
-<a name="l00051"></a>00051         }
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054         start_for( start_for& parent, split ) :
-<a name="l00055"></a>00055             my_range(parent.my_range,split()),    
-<a name="l00056"></a>00056             my_body(parent.my_body),
-<a name="l00057"></a>00057             my_partition(parent.my_partition,split())
-<a name="l00058"></a>00058         {
-<a name="l00059"></a>00059             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00060"></a>00060         }
-<a name="l00062"></a>00062         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00063"></a>00063             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00064"></a>00064         }
-<a name="l00065"></a>00065     <span class="keyword">public</span>:
-<a name="l00066"></a>00066         <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 name="l00067"></a>00067             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00068"></a>00068 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00069"></a>00069                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00045"></a>00045 <span class="keyword">namespace </span>tbb {
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048 
+<a name="l00050"></a><a class="code" href="a00150.html">00050</a> <span class="keyword">class </span><a class="code" href="a00150.html">mutex</a> {
+<a name="l00051"></a>00051 <span class="keyword">public</span>:
+<a name="l00053"></a><a class="code" href="a00150.html#05313cb77d4f85213103d4dab74ed454">00053</a>     <a class="code" href="a00150.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
+<a name="l00054"></a>00054 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>    internal_construct();
+<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
+<a name="l00059"></a>00059 <span class="preprocessor">  #else</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&impl,NULL);
+<a name="l00061"></a>00061         <span class="keywordflow">if</span>( error_code )
+<a name="l00062"></a>00062             tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
+<a name="l00063"></a>00063 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00065"></a>00065     };
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067     ~<a class="code" href="a00150.html">mutex</a>() {
+<a name="l00068"></a>00068 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>        internal_destroy();
 <a name="l00070"></a>00070 <span class="preprocessor">#else</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00072"></a>00072                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00073"></a>00073                 task_group_context context;
-<a name="l00074"></a>00074                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00076"></a>00076                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00077"></a>00077             }
-<a name="l00078"></a>00078         }
-<a name="l00079"></a>00079 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00080"></a>00080 <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 ) {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00082"></a>00082                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00083"></a>00083                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00084"></a>00084             }
-<a name="l00085"></a>00085         }
-<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00087"></a>00087     };
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     <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="l00090"></a>00090     task* start_for<Range,Body,Partitioner>::execute() {
-<a name="l00091"></a>00091         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-<a name="l00092"></a>00092             my_body( my_range );
-<a name="l00093"></a>00093             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>); 
-<a name="l00094"></a>00094         } <span class="keywordflow">else</span> {
-<a name="l00095"></a>00095             empty_task& c = *<span class="keyword">new</span>( this->allocate_continuation() ) empty_task;
-<a name="l00096"></a>00096             recycle_as_child_of(c);
-<a name="l00097"></a>00097             c.set_ref_count(2);
-<a name="l00098"></a>00098             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-<a name="l00099"></a>00099             start_for& b = *<span class="keyword">new</span>( c.allocate_child() ) start_for(*<span class="keyword">this</span>,split());
-<a name="l00100"></a>00100             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
-<a name="l00101"></a>00101             <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00102"></a>00102         }
-<a name="l00103"></a>00103     } 
-<a name="l00104"></a>00104 } <span class="comment">// namespace internal</span>
-<a name="l00106"></a>00106 <span class="comment"></span>
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00109"></a>00109 
-<a name="l00120"></a>00120 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00124"></a><a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">00124</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
-<a name="l00125"></a>00125     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
-<a name="l00126"></a>00126 }
-<a name="l00127"></a>00127 
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00131"></a><a class="code" href="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">00131</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner ) {
-<a name="l00132"></a>00132     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
-<a name="l00133"></a>00133 }
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
+<a name="l00073"></a>00073 <span class="preprocessor">  #else</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00077"></a>00077 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00078"></a>00078     };
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="keyword">class </span>scoped_lock;
+<a name="l00081"></a>00081     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00082"></a>00082 
+<a name="l00084"></a>00084 
+<a name="l00086"></a><a class="code" href="a00151.html">00086</a>     <span class="keyword">class </span><a class="code" href="a00151.html">scoped_lock</a> : internal::no_copy {
+<a name="l00087"></a>00087     <span class="keyword">public</span>:
+<a name="l00089"></a><a class="code" href="a00151.html#1d403ae51b484df5d86d85ae38f11e6e">00089</a>         <a class="code" href="a00151.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00090"></a>00090 
+<a name="l00092"></a>00092 
+<a name="l00093"></a><a class="code" href="a00151.html#605a6b9af0f8cdabdf81825e0de99600">00093</a>         <a class="code" href="a00151.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00150.html">mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00094"></a>00094             <a class="code" href="a00151.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
+<a name="l00095"></a>00095         }
+<a name="l00096"></a>00096 
+<a name="l00098"></a><a class="code" href="a00151.html#0ebbbecaf4311e9df7362cb76ceaa368">00098</a>         <a class="code" href="a00151.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
+<a name="l00099"></a>00099             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00100"></a>00100                 <a class="code" href="a00151.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102 
+<a name="l00104"></a><a class="code" href="a00151.html#862e022841cdc522e4296a5533b22efd">00104</a>         <span class="keywordtype">void</span> <a class="code" href="a00151.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00150.html">mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00105"></a>00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>            internal_acquire(mutex);
+<a name="l00107"></a>00107 <span class="preprocessor">#else</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span>            mutex.<a class="code" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
+<a name="l00109"></a>00109             my_mutex = &mutex;
+<a name="l00110"></a>00110 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00111"></a>00111         }
+<a name="l00112"></a>00112 
+<a name="l00114"></a><a class="code" href="a00151.html#591e0c49b82bcedffcbe0923f1b915ec">00114</a>         <span class="keywordtype">bool</span> <a class="code" href="a00151.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00150.html">mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00115"></a>00115 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
+<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00150.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
+<a name="l00119"></a>00119             <span class="keywordflow">if</span>( result )
+<a name="l00120"></a>00120                 my_mutex = &mutex;
+<a name="l00121"></a>00121             <span class="keywordflow">return</span> result;
+<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00151.html#0d51d18cd99df3b2e93bf07378d0992c">00126</a>         <span class="keywordtype">void</span> <a class="code" href="a00151.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
+<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>            internal_release ();
+<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
+<a name="l00131"></a>00131             my_mutex = NULL;
+<a name="l00132"></a>00132 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00133"></a>00133         }
 <a name="l00134"></a>00134 
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00138"></a><a class="code" href="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">00138</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner ) {
-<a name="l00139"></a>00139     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
-<a name="l00140"></a>00140 }
+<a name="l00135"></a>00135     <span class="keyword">private</span>:
+<a name="l00137"></a>00137         <a class="code" href="a00150.html">mutex</a>* my_mutex;
+<a name="l00138"></a>00138 
+<a name="l00140"></a>00140         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00150.html">mutex</a>& m );
 <a name="l00141"></a>00141 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00145"></a><a class="code" href="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">00145</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00146"></a>00146     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
-<a name="l00147"></a>00147 }
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>
-<a name="l00152"></a>00152 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00153"></a><a class="code" href="a00233.html#g2d317a5e0078cd193125439fed60dfdc">00153</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
-<a name="l00154"></a>00154     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
-<a name="l00155"></a>00155 }
-<a name="l00156"></a>00156 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00160"></a><a class="code" href="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00160</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context< [...]
-<a name="l00161"></a>00161     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00167"></a><a class="code" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">00167</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00168"></a>00168     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00143"></a>00143         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00150.html">mutex</a>& m );
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00150.html">mutex</a>;
+<a name="l00149"></a>00149     };
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     <span class="comment">// Mutex traits</span>
+<a name="l00152"></a>00152     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00153"></a>00153     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00154"></a>00154     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00157"></a>00157 
+<a name="l00159"></a><a class="code" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">00159</a>     <span class="keywordtype">void</span> <a class="code" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
+<a name="l00160"></a>00160 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00162"></a>00162         <span class="keyword">new</span>(tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00151.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00163"></a>00163 <span class="preprocessor">#else</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
+<a name="l00166"></a>00166 <span class="preprocessor">  #else</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
+<a name="l00168"></a>00168 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00170"></a>00170     }
 <a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00174"></a>00174 <span class="keyword">namespace </span>internal {
-<a name="l00176"></a>00176 <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
-<a name="l00177"></a>00177 <span class="keyword">class </span>parallel_for_body : internal::no_assign {
-<a name="l00178"></a>00178     <span class="keyword">const</span> Function &my_func;
-<a name="l00179"></a>00179     <span class="keyword">const</span> Index my_begin;
-<a name="l00180"></a>00180     <span class="keyword">const</span> Index my_step; 
-<a name="l00181"></a>00181 <span class="keyword">public</span>:
-<a name="l00182"></a>00182     parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
-<a name="l00183"></a>00183         : my_func(_func), my_begin(_begin), my_step(_step) {}
-<a name="l00184"></a>00184     
-<a name="l00185"></a>00185     <span class="keywordtype">void</span> operator()( <a class="code" href="a00122.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
-<a name="l00186"></a>00186         <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
-<a name="l00187"></a>00187             my_func( k );
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189 };
-<a name="l00190"></a>00190 } <span class="comment">// namespace internal</span>
-<a name="l00192"></a>00192 <span class="comment"></span>
-<a name="l00193"></a>00193 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00194"></a>00194 
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00198"></a><a class="code" href="a00232.html#15c764c70c8a32e7a4b8c291d0cc8dde">00198</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
-<a name="l00199"></a>00199     <a class="code" href="a00167.html">tbb::task_group_context</a> context;
-<a name="l00200"></a>00200     <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, context);
-<a name="l00201"></a>00201 }
-<a name="l00202"></a>00202 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00203"></a>00203 <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00167.html">tbb::task_group_context</a> &context) {
-<a name="l00204"></a>00204     <span class="keywordflow">if</span> (step <= 0 ) <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"step should be positive"</span>);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> (last > first) {
-<a name="l00207"></a>00207         Index end = (last - first) / step;
-<a name="l00208"></a>00208         <span class="keywordflow">if</span> (first + end * step < last) end++;
-<a name="l00209"></a>00209         <a class="code" href="a00122.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
-<a name="l00210"></a>00210         internal::parallel_for_body<Function, Index> body(f, first, step);
-<a name="l00211"></a>00211         <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00120.html">tbb::auto_partitioner</a>(), context);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213 }
-<a name="l00215"></a>00215 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00216"></a><a class="code" href="a00232.html#490399525b1e690ec31d6db964c6b272">00216</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
-<a name="l00217"></a>00217     <a class="code" href="a00167.html">tbb::task_group_context</a> context;
-<a name="l00218"></a>00218     <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00221"></a>00221 <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00167.html">tbb::task_group_context</a> &context) {
-<a name="l00222"></a>00222     <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
-<a name="l00223"></a>00223 }
-<a name="l00224"></a>00224 
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 <span class="keyword">using</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 } <span class="comment">// namespace tbb</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
-<a name="l00234"></a>00234 
+<a name="l00173"></a>00173 
+<a name="l00174"></a><a class="code" href="a00150.html#4331652c79dea1c1131bd59ab161b234">00174</a>     <span class="keywordtype">bool</span> <a class="code" href="a00150.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
+<a name="l00175"></a>00175 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00177"></a>00177         <a class="code" href="a00151.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00178"></a>00178         s.<a class="code" href="a00151.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
+<a name="l00179"></a>00179         <span class="keywordflow">return</span> s.<a class="code" href="a00151.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
+<a name="l00180"></a>00180 <span class="preprocessor">#else</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
+<a name="l00183"></a>00183 <span class="preprocessor">  #else</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
+<a name="l00185"></a>00185 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 
+<a name="l00190"></a><a class="code" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">00190</a>     <span class="keywordtype">void</span> <a class="code" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
+<a name="l00191"></a>00191 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00193"></a>00193         <a class="code" href="a00151.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00194"></a>00194         s.<a class="code" href="a00151.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00195"></a>00195         s.<a class="code" href="a00151.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
+<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
+<a name="l00199"></a>00199 <span class="preprocessor">  #else</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
+<a name="l00201"></a>00201 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00202"></a>00202 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205 <span class="keyword">private</span>:
+<a name="l00206"></a>00206 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
+<a name="l00208"></a>00208     <span class="keyword">enum</span> state_t {
+<a name="l00209"></a>00209         INITIALIZED=0x1234,
+<a name="l00210"></a>00210         DESTROYED=0x789A,
+<a name="l00211"></a>00211         HELD=0x56CD
+<a name="l00212"></a>00212     } state;
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00215"></a>00215 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00216"></a>00216 
+<a name="l00218"></a>00218     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00222"></a>00222 };
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace tbb </span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00302.html b/doc/html/a00315.html
similarity index 85%
copy from doc/html/a00302.html
copy to doc/html/a00315.html
index aa934cd..08c5127 100644
--- a/doc/html/a00302.html
+++ b/doc/html/a00315.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>null_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -45,21 +45,21 @@
 <a name="l00024"></a>00024 <span class="keyword">namespace </span>tbb {
 <a name="l00025"></a>00025     
 <a name="l00027"></a>00027 
-<a name="l00029"></a><a class="code" href="a00144.html">00029</a> <span class="keyword">class </span><a class="code" href="a00144.html">null_mutex</a> {   
-<a name="l00031"></a>00031     <a class="code" href="a00144.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>& );   
-<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>& );   
+<a name="l00029"></a><a class="code" href="a00152.html">00029</a> <span class="keyword">class </span><a class="code" href="a00152.html">null_mutex</a> {   
+<a name="l00031"></a>00031     <a class="code" href="a00152.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00152.html">null_mutex</a>& );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00152.html">null_mutex</a>& );   
 <a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00145.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00145.html">scoped_lock</a> {   
+<a name="l00035"></a><a class="code" href="a00153.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00153.html">scoped_lock</a> {   
 <a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00145.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00145.html">scoped_lock</a>( <a class="code" href="a00144.html">null_mutex</a>& ) {}   
-<a name="l00039"></a>00039         ~<a class="code" href="a00145.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00144.html">null_mutex</a>& ) {}
-<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00144.html">null_mutex</a>& ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00037"></a>00037         <a class="code" href="a00153.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00153.html">scoped_lock</a>( <a class="code" href="a00152.html">null_mutex</a>& ) {}   
+<a name="l00039"></a>00039         ~<a class="code" href="a00153.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00152.html">null_mutex</a>& ) {}
+<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00152.html">null_mutex</a>& ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
 <a name="l00042"></a>00042         <span class="keywordtype">void</span> release() {}
 <a name="l00043"></a>00043     };
 <a name="l00044"></a>00044   
-<a name="l00045"></a>00045     <a class="code" href="a00144.html">null_mutex</a>() {}
+<a name="l00045"></a>00045     <a class="code" href="a00152.html">null_mutex</a>() {}
 <a name="l00046"></a>00046     
 <a name="l00047"></a>00047     <span class="comment">// Mutex traits   </span>
 <a name="l00048"></a>00048     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;   
diff --git a/doc/html/a00303.html b/doc/html/a00316.html
similarity index 87%
rename from doc/html/a00303.html
rename to doc/html/a00316.html
index 7f648db..aa03e40 100644
--- a/doc/html/a00303.html
+++ b/doc/html/a00316.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>null_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -45,23 +45,23 @@
 <a name="l00024"></a>00024 <span class="keyword">namespace </span>tbb {
 <a name="l00025"></a>00025     
 <a name="l00027"></a>00027 
-<a name="l00029"></a><a class="code" href="a00146.html">00029</a> <span class="keyword">class </span><a class="code" href="a00146.html">null_rw_mutex</a> {
-<a name="l00031"></a>00031     <a class="code" href="a00146.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00146.html">null_rw_mutex</a>& );   
-<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00146.html">null_rw_mutex</a>& );   
+<a name="l00029"></a><a class="code" href="a00154.html">00029</a> <span class="keyword">class </span><a class="code" href="a00154.html">null_rw_mutex</a> {
+<a name="l00031"></a>00031     <a class="code" href="a00154.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00154.html">null_rw_mutex</a>& );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00154.html">null_rw_mutex</a>& );   
 <a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00147.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00147.html">scoped_lock</a> {   
+<a name="l00035"></a><a class="code" href="a00155.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00155.html">scoped_lock</a> {   
 <a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00147.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00147.html">scoped_lock</a>( <a class="code" href="a00146.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
-<a name="l00039"></a>00039         ~<a class="code" href="a00147.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00146.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00037"></a>00037         <a class="code" href="a00155.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00155.html">scoped_lock</a>( <a class="code" href="a00154.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00039"></a>00039         ~<a class="code" href="a00155.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00154.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
 <a name="l00041"></a>00041         <span class="keywordtype">bool</span> upgrade_to_writer() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
 <a name="l00042"></a>00042         <span class="keywordtype">bool</span> downgrade_to_reader() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
-<a name="l00043"></a>00043         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00146.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00043"></a>00043         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00154.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
 <a name="l00044"></a>00044         <span class="keywordtype">void</span> release() {}
 <a name="l00045"></a>00045     };
 <a name="l00046"></a>00046   
-<a name="l00047"></a>00047     <a class="code" href="a00146.html">null_rw_mutex</a>() {}
+<a name="l00047"></a>00047     <a class="code" href="a00154.html">null_rw_mutex</a>() {}
 <a name="l00048"></a>00048     
 <a name="l00049"></a>00049     <span class="comment">// Mutex traits   </span>
 <a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;   
diff --git a/doc/html/a00317.html b/doc/html/a00317.html
index 75f8a07..68f4df1 100644
--- a/doc/html/a00317.html
+++ b/doc/html/a00317.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_for_each.h Source File</title>
+<title>parallel_do.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>parallel_for_each.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>parallel_do.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,50 +39,436 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_each_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_each_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_do_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_do_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_do.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <iterator></span>
 <a name="l00027"></a>00027 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
-<a name="l00030"></a>00030     <span class="comment">// The class calls user function in operator()</span>
-<a name="l00031"></a>00031     <span class="keyword">template</span> <<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Iterator>
-<a name="l00032"></a>00032     <span class="keyword">class </span>parallel_for_each_body : internal::no_assign {
-<a name="l00033"></a>00033         Function &my_func;
-<a name="l00034"></a>00034     <span class="keyword">public</span>:
-<a name="l00035"></a>00035         parallel_for_each_body(Function &_func) : my_func(_func) {}
-<a name="l00036"></a>00036         parallel_for_each_body(<span class="keyword">const</span> parallel_for_each_body<Function, Iterator> &_caller) : my_func(_caller.my_func) {}
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038         <span class="keywordtype">void</span> operator() ( <span class="keyword">typename</span> std::iterator_traits<Iterator>::value_type value )<span class="keyword"> const </span>{
-<a name="l00039"></a>00039             my_func(value);
-<a name="l00040"></a>00040         }
-<a name="l00041"></a>00041     };
-<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
-<a name="l00044"></a>00044 <span class="comment"></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00051"></a><a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">00051</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f, <a class="code" href="a00167.html">task_group_context</a> &context) {
-<a name="l00052"></a>00052     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
-<a name="l00055"></a>00055     <span class="keywordflow">return</span> f;
-<a name="l00056"></a>00056 }
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00060"></a><a class="code" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">00060</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f) {
-<a name="l00061"></a>00061     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body);
-<a name="l00064"></a>00064     <span class="keywordflow">return</span> f;
-<a name="l00065"></a>00065 }
-<a name="l00066"></a>00066 
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 } <span class="comment">// namespace</span>
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
+<a name="l00032"></a>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;
+<a name="l00033"></a>00033     <span class="keyword">template</span><<span class="keyword">typename</span> Body> <span class="keyword">class </span>do_group_task;
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00037"></a>00037     <span class="keyword">struct </span>strip { <span class="keyword">typedef</span> T type; };
+<a name="l00038"></a>00038     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00039"></a>00039     <span class="keyword">struct </span>strip<T&> { <span class="keyword">typedef</span> T type; };
+<a name="l00040"></a>00040     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00041"></a>00041     <span class="keyword">struct </span>strip<const T&> { <span class="keyword">typedef</span> T type; };
+<a name="l00042"></a>00042     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00043"></a>00043     <span class="keyword">struct </span>strip<volatile T&> { <span class="keyword">typedef</span> T type; };
+<a name="l00044"></a>00044     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00045"></a>00045     <span class="keyword">struct </span>strip<const volatile T&> { <span class="keyword">typedef</span> T type; };
+<a name="l00046"></a>00046     <span class="comment">// Most of the compilers remove cv-qualifiers from non-reference function argument types. </span>
+<a name="l00047"></a>00047     <span class="comment">// But unfortunately there are those that don't.</span>
+<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00049"></a>00049     <span class="keyword">struct </span>strip<const T> { <span class="keyword">typedef</span> T type; };
+<a name="l00050"></a>00050     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00051"></a>00051     <span class="keyword">struct </span>strip<volatile T> { <span class="keyword">typedef</span> T type; };
+<a name="l00052"></a>00052     <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00053"></a>00053     <span class="keyword">struct </span>strip<const volatile T> { <span class="keyword">typedef</span> T type; };
+<a name="l00054"></a>00054 } <span class="comment">// namespace internal</span>
+<a name="l00056"></a>00056 <span class="comment"></span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> Item>
+<a name="l00060"></a><a class="code" href="a00156.html">00060</a> <span class="keyword">class </span><a class="code" href="a00156.html">parallel_do_feeder</a>: internal::no_copy
+<a name="l00061"></a>00061 {
+<a name="l00062"></a>00062     <a class="code" href="a00156.html">parallel_do_feeder</a>() {}
+<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00156.html">parallel_do_feeder</a> () {}
+<a name="l00064"></a>00064     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item ) = 0;
+<a name="l00065"></a>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>internal::parallel_do_feeder_impl;
+<a name="l00066"></a>00066 <span class="keyword">public</span>:
+<a name="l00068"></a><a class="code" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">add</a>( <span class="keyword">const</span> Item& item ) {internal_add(item);}
+<a name="l00069"></a>00069 };
 <a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
+<a name="l00072"></a>00072 <span class="keyword">namespace </span>internal {
+<a name="l00074"></a>00074 
+<a name="l00076"></a>00076     <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00077"></a>00077     <span class="keyword">class </span>parallel_do_operator_selector
+<a name="l00078"></a>00078     {
+<a name="l00079"></a>00079         <span class="keyword">typedef</span> parallel_do_feeder<Item> Feeder;
+<a name="l00080"></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 >
+<a name="l00081"></a>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> ) {
+<a name="l00082"></a>00082             obj(arg1);
+<a name="l00083"></a>00083         }
+<a name="l00084"></a>00084         <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
+<a name="l00085"></a>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, parallel_do_feeder<Item>&) <span class="keyword">const</span> ) {
+<a name="l00086"></a>00086             obj(arg1, arg2);
+<a name="l00087"></a>00087         }
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     <span class="keyword">public</span>:
+<a name="l00090"></a>00090         <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2 >
+<a name="l00091"></a>00091         <span class="keyword">static</span> <span class="keywordtype">void</span> call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2 )
+<a name="l00092"></a>00092         {
+<a name="l00093"></a>00093             internal_call( obj, arg1, arg2, &Body::operator() );
+<a name="l00094"></a>00094         }
+<a name="l00095"></a>00095     };
+<a name="l00096"></a>00096 
+<a name="l00098"></a>00098 
+<a name="l00100"></a>00100     <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00101"></a>00101     <span class="keyword">class </span>do_iteration_task: <span class="keyword">public</span> task
+<a name="l00102"></a>00102     {
+<a name="l00103"></a>00103         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105         Item my_value;
+<a name="l00106"></a>00106         feeder_type& my_feeder;
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108         do_iteration_task( <span class="keyword">const</span> Item& value, feeder_type& feeder ) : 
+<a name="l00109"></a>00109             my_value(value), my_feeder(feeder)
+<a name="l00110"></a>00110         {}
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112         <span class="comment">/*override*/</span> 
+<a name="l00113"></a>00113         task* execute()
+<a name="l00114"></a>00114         {
+<a name="l00115"></a>00115             parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, my_value, my_feeder);
+<a name="l00116"></a>00116             <span class="keywordflow">return</span> NULL;
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118 
+<a name="l00119"></a>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>parallel_do_feeder_impl;
+<a name="l00120"></a>00120     }; <span class="comment">// class do_iteration_task</span>
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     <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="l00123"></a>00123     <span class="keyword">class </span>do_iteration_task_iter: <span class="keyword">public</span> task
+<a name="l00124"></a>00124     {
+<a name="l00125"></a>00125         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127         Iterator my_iter;
+<a name="l00128"></a>00128         feeder_type& my_feeder;
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130         do_iteration_task_iter( <span class="keyword">const</span> Iterator& iter, feeder_type& feeder ) : 
+<a name="l00131"></a>00131             my_iter(iter), my_feeder(feeder)
+<a name="l00132"></a>00132         {}
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134         <span class="comment">/*override*/</span> 
+<a name="l00135"></a>00135         task* execute()
+<a name="l00136"></a>00136         {
+<a name="l00137"></a>00137             parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
+<a name="l00138"></a>00138             <span class="keywordflow">return</span> NULL;
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140 
+<a name="l00141"></a>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;    
+<a name="l00142"></a>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;    
+<a name="l00143"></a>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;    
+<a name="l00144"></a>00144     }; <span class="comment">// class do_iteration_task_iter</span>
+<a name="l00145"></a>00145 
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149     <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00150"></a>00150     <span class="keyword">class </span>parallel_do_feeder_impl : <span class="keyword">public</span> parallel_do_feeder<Item>
+<a name="l00151"></a>00151     {
+<a name="l00152"></a>00152         <span class="comment">/*override*/</span> 
+<a name="l00153"></a>00153         <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item )
+<a name="l00154"></a>00154         {
+<a name="l00155"></a>00155             <span class="keyword">typedef</span> do_iteration_task<Body, Item> iteration_type;
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157             iteration_type& t = *<span class="keyword">new</span> (<a class="code" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().allocate_additional_child_of(*my_barrier)) iteration_type(item, *<span class="keyword">this</span>);
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159             t.spawn( t );
+<a name="l00160"></a>00160         }
+<a name="l00161"></a>00161     <span class="keyword">public</span>:
+<a name="l00162"></a>00162         <span class="keyword">const</span> Body* my_body;
+<a name="l00163"></a>00163         empty_task* my_barrier;
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165         parallel_do_feeder_impl()
+<a name="l00166"></a>00166         {
+<a name="l00167"></a>00167             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) empty_task();
+<a name="l00168"></a>00168             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+<a name="l00169"></a>00169         }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>        parallel_do_feeder_impl(<a class="code" href="a00175.html">tbb::task_group_context</a> &context)
+<a name="l00173"></a>00173         {
+<a name="l00174"></a>00174             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(context) ) empty_task();
+<a name="l00175"></a>00175             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+<a name="l00176"></a>00176         }
+<a name="l00177"></a>00177 <span class="preprocessor">#endif</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>
+<a name="l00179"></a>00179         ~parallel_do_feeder_impl()
+<a name="l00180"></a>00180         {
+<a name="l00181"></a>00181             my_barrier->destroy(*my_barrier);
+<a name="l00182"></a>00182         }
+<a name="l00183"></a>00183     }; <span class="comment">// class parallel_do_feeder_impl</span>
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187 
+<a name="l00190"></a>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>00191     <span class="keyword">class </span>do_group_task_forward: <span class="keyword">public</span> task
+<a name="l00192"></a>00192     {
+<a name="l00193"></a>00193         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197         feeder_type& my_feeder;
+<a name="l00198"></a>00198         Iterator my_first;
+<a name="l00199"></a>00199         size_t my_size;
+<a name="l00200"></a>00200         
+<a name="l00201"></a>00201         do_group_task_forward( Iterator first, size_t size, feeder_type& feeder ) 
+<a name="l00202"></a>00202             : my_feeder(feeder), my_first(first), my_size(size)
+<a name="l00203"></a>00203         {}
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205         <span class="comment">/*override*/</span> task* execute()
+<a name="l00206"></a>00206         {
+<a name="l00207"></a>00207             <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+<a name="l00208"></a>00208             __TBB_ASSERT( my_size>0, NULL );
+<a name="l00209"></a>00209             task_list list;
+<a name="l00210"></a>00210             task* t; 
+<a name="l00211"></a>00211             size_t k=0; 
+<a name="l00212"></a>00212             <span class="keywordflow">for</span>(;;) {
+<a name="l00213"></a>00213                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_first, my_feeder );
+<a name="l00214"></a>00214                 ++my_first;
+<a name="l00215"></a>00215                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+<a name="l00216"></a>00216                 list.push_back(*t);
+<a name="l00217"></a>00217             }
+<a name="l00218"></a>00218             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00219"></a>00219             spawn(list);
+<a name="l00220"></a>00220             spawn_and_wait_for_all(*t);
+<a name="l00221"></a>00221             <span class="keywordflow">return</span> NULL;
+<a name="l00222"></a>00222         }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>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>do_task_iter;
+<a name="l00225"></a>00225     }; <span class="comment">// class do_group_task_forward</span>
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227     <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00228"></a>00228     <span class="keyword">class </span>do_group_task_input: <span class="keyword">public</span> task
+<a name="l00229"></a>00229     {
+<a name="l00230"></a>00230         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00231"></a>00231         
+<a name="l00232"></a>00232         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234         feeder_type& my_feeder;
+<a name="l00235"></a>00235         size_t my_size;
+<a name="l00236"></a>00236         aligned_space<Item, max_arg_size> my_arg;
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238         do_group_task_input( feeder_type& feeder ) 
+<a name="l00239"></a>00239             : my_feeder(feeder), my_size(0)
+<a name="l00240"></a>00240         {}
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242         <span class="comment">/*override*/</span> task* execute()
+<a name="l00243"></a>00243         {
+<a name="l00244"></a>00244             <span class="keyword">typedef</span> do_iteration_task_iter<Item*, Body, Item> iteration_type;
+<a name="l00245"></a>00245             __TBB_ASSERT( my_size>0, NULL );
+<a name="l00246"></a>00246             task_list list;
+<a name="l00247"></a>00247             task* t; 
+<a name="l00248"></a>00248             size_t k=0; 
+<a name="l00249"></a>00249             <span class="keywordflow">for</span>(;;) {
+<a name="l00250"></a>00250                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );
+<a name="l00251"></a>00251                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+<a name="l00252"></a>00252                 list.push_back(*t);
+<a name="l00253"></a>00253             }
+<a name="l00254"></a>00254             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00255"></a>00255             spawn(list);
+<a name="l00256"></a>00256             spawn_and_wait_for_all(*t);
+<a name="l00257"></a>00257             <span class="keywordflow">return</span> NULL;
+<a name="l00258"></a>00258         }
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260         ~do_group_task_input(){
+<a name="l00261"></a>00261             <span class="keywordflow">for</span>( size_t k=0; k<my_size; ++k)
+<a name="l00262"></a>00262                 (my_arg.begin() + k)->~Item();
+<a name="l00263"></a>00263         }
+<a name="l00264"></a>00264 
+<a name="l00265"></a>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;
+<a name="l00266"></a>00266     }; <span class="comment">// class do_group_task_input</span>
+<a name="l00267"></a>00267     
+<a name="l00269"></a>00269 
+<a name="l00271"></a>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>00272     <span class="keyword">class </span>do_task_iter: <span class="keyword">public</span> task
+<a name="l00273"></a>00273     {
+<a name="l00274"></a>00274         <span class="keyword">typedef</span> parallel_do_feeder_impl<Body, Item> feeder_type;
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276     <span class="keyword">public</span>:
+<a name="l00277"></a>00277         do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) : 
+<a name="l00278"></a>00278             my_first(first), my_last(last), my_feeder(feeder)
+<a name="l00279"></a>00279         {}
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281     <span class="keyword">private</span>:
+<a name="l00282"></a>00282         Iterator my_first;
+<a name="l00283"></a>00283         Iterator my_last;
+<a name="l00284"></a>00284         feeder_type& my_feeder;
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286         <span class="comment">/* Do not merge run(xxx) and run_xxx() methods. They are separated in order</span>
+<a name="l00287"></a>00287 <span class="comment">            to make sure that compilers will eliminate unused argument of type xxx</span>
+<a name="l00288"></a>00288 <span class="comment">            (that is will not put it on stack). The sole purpose of this argument </span>
+<a name="l00289"></a>00289 <span class="comment">            is overload resolution.</span>
+<a name="l00290"></a>00290 <span class="comment">            </span>
+<a name="l00291"></a>00291 <span class="comment">            An alternative could be using template functions, but explicit specialization </span>
+<a name="l00292"></a>00292 <span class="comment">            of member function templates is not supported for non specialized class </span>
+<a name="l00293"></a>00293 <span class="comment">            templates. Besides template functions would always fall back to the least </span>
+<a name="l00294"></a>00294 <span class="comment">            efficient variant (the one for input iterators) in case of iterators having </span>
+<a name="l00295"></a>00295 <span class="comment">            custom tags derived from basic ones. */</span>
+<a name="l00296"></a>00296         <span class="comment">/*override*/</span> task* execute()
+<a name="l00297"></a>00297         {
+<a name="l00298"></a>00298             <span class="keyword">typedef</span> <span class="keyword">typename</span> std::iterator_traits<Iterator>::iterator_category iterator_tag;
+<a name="l00299"></a>00299             <span class="keywordflow">return</span> run( (iterator_tag*)NULL );
+<a name="l00300"></a>00300         }
+<a name="l00301"></a>00301 
+<a name="l00304"></a>00304         <span class="keyword">inline</span> task* run( <span class="keywordtype">void</span>* ) { <span class="keywordflow">return</span> run_for_input_iterator(); }
+<a name="l00305"></a>00305         
+<a name="l00306"></a>00306         task* run_for_input_iterator() {
+<a name="l00307"></a>00307             <span class="keyword">typedef</span> do_group_task_input<Body, Item> block_type;
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309             block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
+<a name="l00310"></a>00310             size_t k=0; 
+<a name="l00311"></a>00311             <span class="keywordflow">while</span>( !(my_first == my_last) ) {
+<a name="l00312"></a>00312                 <span class="keyword">new</span> (t.my_arg.begin() + k) Item(*my_first);
+<a name="l00313"></a>00313                 ++my_first;
+<a name="l00314"></a>00314                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00315"></a>00315                     <span class="keywordflow">if</span> ( !(my_first == my_last) )
+<a name="l00316"></a>00316                         recycle_to_reexecute();
+<a name="l00317"></a>00317                     <span class="keywordflow">break</span>;
+<a name="l00318"></a>00318                 }
+<a name="l00319"></a>00319             }
+<a name="l00320"></a>00320             <span class="keywordflow">if</span>( k==0 ) {
+<a name="l00321"></a>00321                 destroy(t);
+<a name="l00322"></a>00322                 <span class="keywordflow">return</span> NULL;
+<a name="l00323"></a>00323             } <span class="keywordflow">else</span> {
+<a name="l00324"></a>00324                 t.my_size = k;
+<a name="l00325"></a>00325                 <span class="keywordflow">return</span> &t;
+<a name="l00326"></a>00326             }
+<a name="l00327"></a>00327         }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329         <span class="keyword">inline</span> task* run( std::forward_iterator_tag* ) { <span class="keywordflow">return</span> run_for_forward_iterator(); }
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331         task* run_for_forward_iterator() {
+<a name="l00332"></a>00332             <span class="keyword">typedef</span> do_group_task_forward<Iterator, Body, Item> block_type;
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334             Iterator first = my_first;
+<a name="l00335"></a>00335             size_t k=0; 
+<a name="l00336"></a>00336             <span class="keywordflow">while</span>( !(my_first==my_last) ) {
+<a name="l00337"></a>00337                 ++my_first;
+<a name="l00338"></a>00338                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00339"></a>00339                     <span class="keywordflow">if</span> ( !(my_first==my_last) )
+<a name="l00340"></a>00340                         recycle_to_reexecute();
+<a name="l00341"></a>00341                     <span class="keywordflow">break</span>;
+<a name="l00342"></a>00342                 }
+<a name="l00343"></a>00343             }
+<a name="l00344"></a>00344             <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);
+<a name="l00345"></a>00345         }
+<a name="l00346"></a>00346         
+<a name="l00347"></a>00347         <span class="keyword">inline</span> task* run( std::random_access_iterator_tag* ) { <span class="keywordflow">return</span> run_for_random_access_iterator(); }
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349         task* run_for_random_access_iterator() {
+<a name="l00350"></a>00350             <span class="keyword">typedef</span> do_group_task_forward<Iterator, Body, Item> block_type;
+<a name="l00351"></a>00351             <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+<a name="l00352"></a>00352             
+<a name="l00353"></a>00353             size_t k = static_cast<size_t>(my_last-my_first); 
+<a name="l00354"></a>00354             <span class="keywordflow">if</span>( k > block_type::max_arg_size ) {
+<a name="l00355"></a>00355                 Iterator middle = my_first + k/2;
+<a name="l00356"></a>00356 
+<a name="l00357"></a>00357                 empty_task& c = *<span class="keyword">new</span>( allocate_continuation() ) empty_task;
+<a name="l00358"></a>00358                 do_task_iter& b = *<span class="keyword">new</span>( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);
+<a name="l00359"></a>00359                 recycle_as_child_of(c);
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361                 my_last = middle;
+<a name="l00362"></a>00362                 c.set_ref_count(2);
+<a name="l00363"></a>00363                 c.spawn(b);
+<a name="l00364"></a>00364                 <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00365"></a>00365             }<span class="keywordflow">else</span> <span class="keywordflow">if</span>( k != 0 ) {
+<a name="l00366"></a>00366                 task_list list;
+<a name="l00367"></a>00367                 task* t; 
+<a name="l00368"></a>00368                 size_t k1=0; 
+<a name="l00369"></a>00369                 <span class="keywordflow">for</span>(;;) {
+<a name="l00370"></a>00370                     t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_first, my_feeder);
+<a name="l00371"></a>00371                     ++my_first;
+<a name="l00372"></a>00372                     <span class="keywordflow">if</span>( ++k1==k ) <span class="keywordflow">break</span>;
+<a name="l00373"></a>00373                     list.push_back(*t);
+<a name="l00374"></a>00374                 }
+<a name="l00375"></a>00375                 set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00376"></a>00376                 spawn(list);
+<a name="l00377"></a>00377                 spawn_and_wait_for_all(*t);
+<a name="l00378"></a>00378             }
+<a name="l00379"></a>00379             <span class="keywordflow">return</span> NULL;
+<a name="l00380"></a>00380         }
+<a name="l00381"></a>00381     }; <span class="comment">// class do_task_iter</span>
+<a name="l00382"></a>00382 
+<a name="l00384"></a>00384 
+<a name="l00386"></a>00386     <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="l00387"></a>00387     <span class="keywordtype">void</span> run_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body& body
+<a name="l00388"></a>00388 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00389"></a>00389         , task_group_context& context
+<a name="l00390"></a>00390 #endif
+<a name="l00391"></a>00391         )
+<a name="l00392"></a>00392     {
+<a name="l00393"></a>00393         <span class="keyword">typedef</span> do_task_iter<Iterator, Body, Item> root_iteration_task;
+<a name="l00394"></a>00394 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span>        parallel_do_feeder_impl<Body, Item> feeder(context);
+<a name="l00396"></a>00396 <span class="preprocessor">#else</span>
+<a name="l00397"></a>00397 <span class="preprocessor"></span>        parallel_do_feeder_impl<Body, Item> feeder;
+<a name="l00398"></a>00398 <span class="preprocessor">#endif</span>
+<a name="l00399"></a>00399 <span class="preprocessor"></span>        feeder.my_body = &body;
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401         root_iteration_task &t = *<span class="keyword">new</span>( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
+<a name="l00402"></a>00402 
+<a name="l00403"></a>00403         feeder.my_barrier->set_ref_count(2);
+<a name="l00404"></a>00404         feeder.my_barrier->spawn_and_wait_for_all(t);
+<a name="l00405"></a>00405     }
+<a name="l00406"></a>00406 
+<a name="l00408"></a>00408 
+<a name="l00410"></a>00410     <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="l00411"></a>00411     <span class="keywordtype">void</span> select_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item) <span class="keyword">const</span>
+<a name="l00412"></a>00412 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00413"></a>00413         , task_group_context& context 
+<a name="l00414"></a>00414 #endif <span class="comment">// __TBB_EXCEPTIONS </span>
+<a name="l00415"></a>00415         )
+<a name="l00416"></a>00416     {
+<a name="l00417"></a>00417         run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+<a name="l00418"></a>00418 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span>            , context
+<a name="l00420"></a>00420 <span class="preprocessor">#endif // __TBB_EXCEPTIONS </span>
+<a name="l00421"></a>00421 <span class="preprocessor"></span>            );
+<a name="l00422"></a>00422     }
+<a name="l00423"></a>00423 
+<a name="l00425"></a>00425 
+<a name="l00427"></a>00427     <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="l00428"></a>00428     <span class="keywordtype">void</span> select_parallel_do( 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>
+<a name="l00429"></a>00429 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00430"></a>00430         , task_group_context& context 
+<a name="l00431"></a>00431 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+<a name="l00432"></a>00432         )
+<a name="l00433"></a>00433     {
+<a name="l00434"></a>00434         run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+<a name="l00435"></a>00435 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span>            , context
+<a name="l00437"></a>00437 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span>            );
+<a name="l00439"></a>00439     }
+<a name="l00440"></a>00440 
+<a name="l00441"></a>00441 } <span class="comment">// namespace internal</span>
+<a name="l00443"></a>00443 <span class="comment"></span>
+<a name="l00444"></a>00444 
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468 
+<a name="l00469"></a>00469 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body> 
+<a name="l00470"></a><a class="code" href="a00241.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body )
+<a name="l00471"></a>00471 {
+<a name="l00472"></a>00472     <span class="keywordflow">if</span> ( first == last )
+<a name="l00473"></a>00473         <span class="keywordflow">return</span>;
+<a name="l00474"></a>00474 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span>    <a class="code" href="a00175.html">task_group_context</a> context;
+<a name="l00476"></a>00476 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span>    internal::select_parallel_do( first, last, body, &Body::operator()
+<a name="l00478"></a>00478 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00479"></a>00479         , context
+<a name="l00480"></a>00480 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+<a name="l00481"></a>00481         );
+<a name="l00482"></a>00482 }
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span>
+<a name="l00487"></a>00487 <span class="preprocessor">template<typename Iterator, typename Body> </span>
+<a name="l00488"></a><a class="code" href="a00241.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00241.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00175.html">task_group_context</a>& context  )
+<a name="l00489"></a>00489 {
+<a name="l00490"></a>00490     <span class="keywordflow">if</span> ( first == last )
+<a name="l00491"></a>00491         <span class="keywordflow">return</span>;
+<a name="l00492"></a>00492     internal::select_parallel_do( first, last, body, &Body::operator(), context );
+<a name="l00493"></a>00493 }
+<a name="l00494"></a>00494 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00495"></a>00495 <span class="preprocessor"></span>
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498 } <span class="comment">// namespace </span>
+<a name="l00499"></a>00499 
+<a name="l00500"></a>00500 <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.
diff --git a/doc/html/a00325.html b/doc/html/a00325.html
deleted file mode 100644
index e0ea2c4..0000000
--- a/doc/html/a00325.html
+++ /dev/null
@@ -1,360 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
-<a name="l00030"></a>00030 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
-<a name="l00033"></a>00033 
-<a name="l00035"></a>00035     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
-<a name="l00036"></a>00036 
-<a name="l00038"></a>00038     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-<a name="l00039"></a>00039 
-<a name="l00040"></a>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 ) {
-<a name="l00041"></a>00041 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>        itt_store_pointer_with_release_v3(&dst,src);
-<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>        __TBB_store_with_release(dst,src);
-<a name="l00045"></a>00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00046"></a>00046     }
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T* parallel_reduce_load_body( T*& src ) {
-<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordflow">return</span> static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
-<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
-<a name="l00053"></a>00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00054"></a>00054     }
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
-<a name="l00059"></a>00059 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00063"></a>00063     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> task {
-<a name="l00065"></a>00065         Body* my_body;
-<a name="l00066"></a>00066         <span class="keywordtype">bool</span> has_right_zombie;
-<a name="l00067"></a>00067         <span class="keyword">const</span> reduction_context my_context;
-<a name="l00068"></a>00068         aligned_space<Body,1> zombie_space;
-<a name="l00069"></a>00069         finish_reduce( <span class="keywordtype">char</span> context ) : 
-<a name="l00070"></a>00070             my_body(NULL),
-<a name="l00071"></a>00071             has_right_zombie(false),
-<a name="l00072"></a>00072             my_context(context)
-<a name="l00073"></a>00073         {
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075         task* execute() {
-<a name="l00076"></a>00076             <span class="keywordflow">if</span>( has_right_zombie ) {
-<a name="l00077"></a>00077                 <span class="comment">// Right child was stolen.</span>
-<a name="l00078"></a>00078                 Body* s = zombie_space.begin();
-<a name="l00079"></a>00079                 my_body->join( *s );
-<a name="l00080"></a>00080                 s->~Body();
-<a name="l00081"></a>00081             }
-<a name="l00082"></a>00082             <span class="keywordflow">if</span>( my_context==1 ) 
-<a name="l00083"></a>00083                 parallel_reduce_store_body( static_cast<finish_reduce*>(parent())->my_body, my_body );
-<a name="l00084"></a>00084             <span class="keywordflow">return</span> NULL;
-<a name="l00085"></a>00085         }       
-<a name="l00086"></a>00086         <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="l00087"></a>00087         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
-<a name="l00088"></a>00088     };
-<a name="l00089"></a>00089 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092     <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="l00093"></a>00093     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
-<a name="l00094"></a>00094         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
-<a name="l00095"></a>00095         Body* my_body;
-<a name="l00096"></a>00096         Range my_range;
-<a name="l00097"></a>00097         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-<a name="l00098"></a>00098         reduction_context my_context;
-<a name="l00099"></a>00099         <span class="comment">/*override*/</span> task* execute();
-<a name="l00100"></a>00100         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
-<a name="l00101"></a>00101         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
-<a name="l00102"></a>00102     
-<a name="l00104"></a>00104         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
-<a name="l00105"></a>00105             my_body(body),
-<a name="l00106"></a>00106             my_range(range),
-<a name="l00107"></a>00107             my_partition(partitioner),
-<a name="l00108"></a>00108             my_context(0)
-<a name="l00109"></a>00109         {
-<a name="l00110"></a>00110         }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113         start_reduce( start_reduce& parent, split ) :
-<a name="l00114"></a>00114             my_body(parent.my_body),
-<a name="l00115"></a>00115             my_range(parent.my_range,split()),
-<a name="l00116"></a>00116             my_partition(parent.my_partition,split()),
-<a name="l00117"></a>00117             my_context(2)
-<a name="l00118"></a>00118         {
-<a name="l00119"></a>00119             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00120"></a>00120             parent.my_context = 1;
-<a name="l00121"></a>00121         }
-<a name="l00123"></a>00123         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00124"></a>00124             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00125"></a>00125         }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">public</span>:
-<a name="l00128"></a>00128         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
-<a name="l00129"></a>00129             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00130"></a>00130 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00131"></a>00131                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
-<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00134"></a>00134                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00135"></a>00135                 task_group_context context;
-<a name="l00136"></a>00136                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
-<a name="l00137"></a>00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00138"></a>00138             }
-<a name="l00139"></a>00139         }
-<a name="l00140"></a>00140 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {
-<a name="l00142"></a>00142             <span class="keywordflow">if</span>( !range.empty() ) 
-<a name="l00143"></a>00143                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
-<a name="l00144"></a>00144         }
-<a name="l00145"></a>00145 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00146"></a>00146     };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <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="l00149"></a>00149     task* start_reduce<Range,Body,Partitioner>::execute() {
-<a name="l00150"></a>00150         <span class="keywordflow">if</span>( my_context==2 ) {
-<a name="l00151"></a>00151             finish_type* p = static_cast<finish_type*>(parent() );
-<a name="l00152"></a>00152             <span class="keywordflow">if</span>( !parallel_reduce_load_body(p->my_body) ) {
-<a name="l00153"></a>00153                 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,split());
-<a name="l00154"></a>00154                 p->has_right_zombie = <span class="keyword">true</span>;
-<a name="l00155"></a>00155             } 
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-<a name="l00158"></a>00158             (*my_body)( my_range );
-<a name="l00159"></a>00159             <span class="keywordflow">if</span>( my_context==1 ) 
-<a name="l00160"></a>00160                 parallel_reduce_store_body(static_cast<finish_type*>(parent())->my_body, my_body );
-<a name="l00161"></a>00161             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
-<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163             finish_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_type(my_context);
-<a name="l00164"></a>00164             recycle_as_child_of(c);
-<a name="l00165"></a>00165             c.set_ref_count(2);    
-<a name="l00166"></a>00166             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-<a name="l00167"></a>00167             start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,split());
-<a name="l00168"></a>00168             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
-<a name="l00169"></a>00169             <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171     } 
-<a name="l00172"></a>00172 
-<a name="l00174"></a>00174 
-<a name="l00178"></a>00178     <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="l00179"></a>00179     <span class="keyword">class </span>lambda_reduce_body {
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
-<a name="l00182"></a>00182 <span class="comment">//       (might require some performance measurements)</span>
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184         <span class="keyword">const</span> Value&     identity_element;
-<a name="l00185"></a>00185         <span class="keyword">const</span> RealBody&  my_real_body;
-<a name="l00186"></a>00186         <span class="keyword">const</span> Reduction& my_reduction;
-<a name="l00187"></a>00187         Value            my_value;
-<a name="l00188"></a>00188         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
-<a name="l00189"></a>00189     <span class="keyword">public</span>:
-<a name="l00190"></a>00190         lambda_reduce_body( <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& body, <span class="keyword">const</span> Reduction& reduction )
-<a name="l00191"></a>00191             : identity_element(identity)
-<a name="l00192"></a>00192             , my_real_body(body)
-<a name="l00193"></a>00193             , my_reduction(reduction)
-<a name="l00194"></a>00194             , my_value(identity)
-<a name="l00195"></a>00195         { }
-<a name="l00196"></a>00196         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
-<a name="l00197"></a>00197             : identity_element(other.identity_element)
-<a name="l00198"></a>00198             , my_real_body(other.my_real_body)
-<a name="l00199"></a>00199             , my_reduction(other.my_reduction)
-<a name="l00200"></a>00200             , my_value(other.my_value)
-<a name="l00201"></a>00201         { }
-<a name="l00202"></a>00202         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00165.html">tbb::split</a> )
-<a name="l00203"></a>00203             : identity_element(other.identity_element)
-<a name="l00204"></a>00204             , my_real_body(other.my_real_body)
-<a name="l00205"></a>00205             , my_reduction(other.my_reduction)
-<a name="l00206"></a>00206             , my_value(other.identity_element)
-<a name="l00207"></a>00207         { }
-<a name="l00208"></a>00208         <span class="keywordtype">void</span> operator()(Range& range) {
-<a name="l00209"></a>00209             my_value = my_real_body(range, const_cast<const Value&>(my_value));
-<a name="l00210"></a>00210         }
-<a name="l00211"></a>00211         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
-<a name="l00212"></a>00212             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214         Value result()<span class="keyword"> const </span>{
-<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_value;
-<a name="l00216"></a>00216         }
-<a name="l00217"></a>00217     };
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 } <span class="comment">// namespace internal</span>
-<a name="l00221"></a>00221 <span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00223"></a>00223 
-<a name="l00242"></a>00242 
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00246"></a><a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">00246</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00247"></a>00247     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
-<a name="l00248"></a>00248 }
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00253"></a><a class="code" href="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">00253</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner ) {
-<a name="l00254"></a>00254     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
-<a name="l00255"></a>00255 }
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00260"></a><a class="code" href="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner ) {
-<a name="l00261"></a>00261     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
-<a name="l00262"></a>00262 }
-<a name="l00263"></a>00263 
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00267"></a><a class="code" href="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00268"></a>00268     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span>
-<a name="l00274"></a>00274 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00275"></a><a class="code" href="a00233.html#g45cb00c42a18e334bbde8b7535afe460">00275</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_cont [...]
-<a name="l00276"></a>00276     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
-<a name="l00277"></a>00277 }
-<a name="l00278"></a>00278 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00282"></a><a class="code" href="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00282</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00283"></a>00283     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
-<a name="l00284"></a>00284 }
-<a name="l00285"></a>00285 
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00289"></a><a class="code" href="a00233.html#gd9ac3a3811060314695f33b703c6e11b">00289</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00290"></a>00290     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
-<a name="l00291"></a>00291 }
-<a name="l00292"></a>00292 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00293"></a>00293 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 <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="l00300"></a><a class="code" href="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">00300</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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 ) {
-<a name="l00301"></a>00301     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00302"></a>00302     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
-<a name="l00303"></a>00303                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
-<a name="l00304"></a>00304     <span class="keywordflow">return</span> body.result();
-<a name="l00305"></a>00305 }
-<a name="l00306"></a>00306 
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <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="l00310"></a><a class="code" href="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00310</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00311"></a>00311                        <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner ) {
-<a name="l00312"></a>00312     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00313"></a>00313     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>>
-<a name="l00314"></a>00314                           ::run(range, body, partitioner );
-<a name="l00315"></a>00315     <span class="keywordflow">return</span> body.result();
-<a name="l00316"></a>00316 }
-<a name="l00317"></a>00317 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <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="l00321"></a><a class="code" href="a00233.html#gb175401f0729e40dd2c5860a17c14385">00321</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00322"></a>00322                        <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner ) {
-<a name="l00323"></a>00323     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00324"></a>00324     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>>
-<a name="l00325"></a>00325                           ::run( range, body, partitioner );
-<a name="l00326"></a>00326     <span class="keywordflow">return</span> body.result();
-<a name="l00327"></a>00327 }
-<a name="l00328"></a>00328 
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 <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="l00332"></a><a class="code" href="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">00332</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00333"></a>00333                        <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00334"></a>00334     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00335"></a>00335     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00115.html">affinity_partitioner</a>>
-<a name="l00336"></a>00336                                         ::run( range, body, partitioner );
-<a name="l00337"></a>00337     <span class="keywordflow">return</span> body.result();
-<a name="l00338"></a>00338 }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00342"></a>00342 <span class="preprocessor"></span>
-<a name="l00343"></a>00343 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
-<a name="l00344"></a><a class="code" href="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00344</a> <span class="preprocessor"></span>Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00345"></a>00345                        <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00346"></a>00346     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00347"></a>00347     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>>
-<a name="l00348"></a>00348                           ::run( range, body, partitioner, context );
-<a name="l00349"></a>00349     <span class="keywordflow">return</span> body.result();
-<a name="l00350"></a>00350 }
-<a name="l00351"></a>00351 
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 <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="l00355"></a><a class="code" href="a00233.html#g630c90a399937d9d4ae70ff883186dfd">00355</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00356"></a>00356                        <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00357"></a>00357     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00358"></a>00358     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>>
-<a name="l00359"></a>00359                           ::run( range, body, partitioner, context );
-<a name="l00360"></a>00360     <span class="keywordflow">return</span> body.result();
-<a name="l00361"></a>00361 }
-<a name="l00362"></a>00362 
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <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="l00366"></a><a class="code" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">00366</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">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,
-<a name="l00367"></a>00367                        <a class="code" href="a00115.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00167.html">task_group_context</a>& context ) {
-<a name="l00368"></a>00368     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00369"></a>00369     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00115.html">affinity_partitioner</a>>
-<a name="l00370"></a>00370                                         ::run( range, body, partitioner, context );
-<a name="l00371"></a>00371     <span class="keywordflow">return</span> body.result();
-<a name="l00372"></a>00372 }
-<a name="l00373"></a>00373 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 } <span class="comment">// namespace tbb</span>
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
-<a name="l00379"></a>00379 
-</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/a00326.html b/doc/html/a00326.html
new file mode 100644
index 0000000..6d3085f
--- /dev/null
+++ b/doc/html/a00326.html
@@ -0,0 +1,234 @@
+<!DOCTYPE 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_for.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>parallel_for.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037     <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="l00038"></a>00038     <span class="keyword">class </span>start_for: <span class="keyword">public</span> task {
+<a name="l00039"></a>00039         Range my_range;
+<a name="l00040"></a>00040         <span class="keyword">const</span> Body my_body;
+<a name="l00041"></a>00041         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00042"></a>00042         <span class="comment">/*override*/</span> task* execute();
+<a name="l00043"></a>00043 
+<a name="l00045"></a>00045         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
+<a name="l00046"></a>00046             my_range(range),    
+<a name="l00047"></a>00047             my_body(body),
+<a name="l00048"></a>00048             my_partition(partitioner)
+<a name="l00049"></a>00049         {
+<a name="l00050"></a>00050         }
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053         start_for( start_for& parent, split ) :
+<a name="l00054"></a>00054             my_range(parent.my_range,split()),    
+<a name="l00055"></a>00055             my_body(parent.my_body),
+<a name="l00056"></a>00056             my_partition(parent.my_partition,split())
+<a name="l00057"></a>00057         {
+<a name="l00058"></a>00058             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00059"></a>00059         }
+<a name="l00061"></a>00061         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00062"></a>00062             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00063"></a>00063         }
+<a name="l00064"></a>00064     <span class="keyword">public</span>:
+<a name="l00065"></a>00065         <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 name="l00066"></a>00066             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00067"></a>00067 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00068"></a>00068                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00069"></a>00069 <span class="preprocessor">#else</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00071"></a>00071                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00072"></a>00072                 task_group_context context;
+<a name="l00073"></a>00073                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00075"></a>00075                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00076"></a>00076             }
+<a name="l00077"></a>00077         }
+<a name="l00078"></a>00078 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00079"></a>00079 <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 ) {
+<a name="l00080"></a>00080             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00081"></a>00081                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00082"></a>00082                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00083"></a>00083             }
+<a name="l00084"></a>00084         }
+<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00086"></a>00086     };
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088     <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="l00089"></a>00089     task* start_for<Range,Body,Partitioner>::execute() {
+<a name="l00090"></a>00090         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00091"></a>00091             my_body( my_range );
+<a name="l00092"></a>00092             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>); 
+<a name="l00093"></a>00093         } <span class="keywordflow">else</span> {
+<a name="l00094"></a>00094             empty_task& c = *<span class="keyword">new</span>( this->allocate_continuation() ) empty_task;
+<a name="l00095"></a>00095             recycle_as_child_of(c);
+<a name="l00096"></a>00096             c.set_ref_count(2);
+<a name="l00097"></a>00097             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00098"></a>00098             start_for& b = *<span class="keyword">new</span>( c.allocate_child() ) start_for(*<span class="keyword">this</span>,split());
+<a name="l00099"></a>00099             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
+<a name="l00100"></a>00100             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102     } 
+<a name="l00103"></a>00103 } <span class="comment">// namespace internal</span>
+<a name="l00105"></a>00105 <span class="comment"></span>
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00108"></a>00108 
+<a name="l00119"></a>00119 
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00123"></a><a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">00123</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
+<a name="l00124"></a>00124     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126 
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00130"></a><a class="code" href="a00241.html#g13cac5dd55c7533bccea43a51c33d0e5">00130</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner ) {
+<a name="l00131"></a>00131     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
+<a name="l00132"></a>00132 }
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00137"></a><a class="code" href="a00241.html#ga7ac75d532389b55b9247f3fdb0b00d1">00137</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner ) {
+<a name="l00138"></a>00138     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00144"></a><a class="code" href="a00241.html#g9cd1b210ceb1c040f30e390b4a21bde8">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00145"></a>00145     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>
+<a name="l00151"></a>00151 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00152"></a><a class="code" href="a00241.html#g2d317a5e0078cd193125439fed60dfdc">00152</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
+<a name="l00153"></a>00153     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155 
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00159"></a><a class="code" href="a00241.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00159</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context< [...]
+<a name="l00160"></a>00160     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
+<a name="l00161"></a>00161 }
+<a name="l00162"></a>00162 
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00166"></a><a class="code" href="a00241.html#g04b4696b67370c01353ff5974c8f1196">00166</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00167"></a>00167     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 
+<a name="l00173"></a>00173 <span class="keyword">namespace </span>internal {
+<a name="l00175"></a>00175 <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
+<a name="l00176"></a>00176 <span class="keyword">class </span>parallel_for_body : internal::no_assign {
+<a name="l00177"></a>00177     <span class="keyword">const</span> Function &my_func;
+<a name="l00178"></a>00178     <span class="keyword">const</span> Index my_begin;
+<a name="l00179"></a>00179     <span class="keyword">const</span> Index my_step; 
+<a name="l00180"></a>00180 <span class="keyword">public</span>:
+<a name="l00181"></a>00181     parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
+<a name="l00182"></a>00182         : my_func(_func), my_begin(_begin), my_step(_step) {}
+<a name="l00183"></a>00183     
+<a name="l00184"></a>00184     <span class="keywordtype">void</span> operator()( <a class="code" href="a00127.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
+<a name="l00185"></a>00185         <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00127.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
+<a name="l00186"></a>00186             my_func( k );
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 };
+<a name="l00189"></a>00189 } <span class="comment">// namespace internal</span>
+<a name="l00191"></a>00191 <span class="comment"></span>
+<a name="l00192"></a>00192 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00193"></a>00193 
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00197"></a><a class="code" href="a00240.html#15c764c70c8a32e7a4b8c291d0cc8dde">00197</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
+<a name="l00198"></a>00198     <a class="code" href="a00175.html">tbb::task_group_context</a> context;
+<a name="l00199"></a>00199     <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, context);
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00202"></a>00202 <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00175.html">tbb::task_group_context</a> &context) {
+<a name="l00203"></a>00203     <span class="keywordflow">if</span> (step <= 0 )
+<a name="l00204"></a>00204         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
+<a name="l00205"></a>00205     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
+<a name="l00206"></a>00206         Index end = (last - first) / step;
+<a name="l00207"></a>00207         <span class="keywordflow">if</span> (first + end * step < last) end++;
+<a name="l00208"></a>00208         <a class="code" href="a00127.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
+<a name="l00209"></a>00209         internal::parallel_for_body<Function, Index> body(f, first, step);
+<a name="l00210"></a>00210         <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00125.html">tbb::auto_partitioner</a>(), context);
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 }
+<a name="l00214"></a>00214 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00215"></a><a class="code" href="a00240.html#490399525b1e690ec31d6db964c6b272">00215</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
+<a name="l00216"></a>00216     <a class="code" href="a00175.html">tbb::task_group_context</a> context;
+<a name="l00217"></a>00217     <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<a name="l00218"></a>00218 }
+<a name="l00219"></a>00219 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00220"></a>00220 <span class="keywordtype">void</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00175.html">tbb::task_group_context</a> &context) {
+<a name="l00221"></a>00221     <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<a name="l00222"></a>00222 }
+<a name="l00223"></a>00223 
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="keyword">using</span> <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 } <span class="comment">// namespace tbb</span>
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
+<a name="l00233"></a>00233 
+</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/a00329.html b/doc/html/a00329.html
deleted file mode 100644
index d0d8b59..0000000
--- a/doc/html/a00329.html
+++ /dev/null
@@ -1,341 +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_scan.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_scan.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_scan_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_scan_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <new></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
-<a name="l00030"></a>00030 
-<a name="l00032"></a>00032 
-<a name="l00033"></a><a class="code" href="a00151.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00151.html">pre_scan_tag</a> {
-<a name="l00034"></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>;}
-<a name="l00035"></a>00035 };
-<a name="l00036"></a>00036 
-<a name="l00038"></a>00038 
-<a name="l00039"></a><a class="code" href="a00140.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00140.html">final_scan_tag</a> {
-<a name="l00040"></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>;}
-<a name="l00041"></a>00041 };
-<a name="l00042"></a>00042 
-<a name="l00044"></a>00044 <span class="keyword">namespace </span>internal {
-<a name="l00045"></a>00045 
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00049"></a>00049     <span class="keyword">class </span>final_sum: <span class="keyword">public</span> <a class="code" href="a00166.html">task</a> {
-<a name="l00050"></a>00050     <span class="keyword">public</span>:
-<a name="l00051"></a>00051         Body body;
-<a name="l00052"></a>00052     <span class="keyword">private</span>:
-<a name="l00053"></a>00053         <a class="code" href="a00116.html">aligned_space<Range,1></a> range;
-<a name="l00055"></a>00055         Body* stuff_last;
-<a name="l00056"></a>00056     <span class="keyword">public</span>:
-<a name="l00057"></a>00057         final_sum( Body& body_ ) :
-<a name="l00058"></a>00058             body(body_,<a class="code" href="a00165.html">split</a>())
-<a name="l00059"></a>00059         {
-<a name="l00060"></a>00060             poison_pointer(stuff_last);
-<a name="l00061"></a>00061         }
-<a name="l00062"></a>00062         ~final_sum() {
-<a name="l00063"></a>00063             range.begin()->~Range();
-<a name="l00064"></a>00064         }     
-<a name="l00065"></a>00065         <span class="keywordtype">void</span> finish_construction( <span class="keyword">const</span> Range& range_, Body* stuff_last_ ) {
-<a name="l00066"></a>00066             <span class="keyword">new</span>( range.begin() ) Range(range_);
-<a name="l00067"></a>00067             stuff_last = stuff_last_;
-<a name="l00068"></a>00068         }
-<a name="l00069"></a>00069     <span class="keyword">private</span>:
-<a name="l00070"></a>00070         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00071"></a>00071             body( *range.begin(), final_scan_tag() );
-<a name="l00072"></a>00072             <span class="keywordflow">if</span>( stuff_last )
-<a name="l00073"></a>00073                 stuff_last->assign(body);
-<a name="l00074"></a>00074             <span class="keywordflow">return</span> NULL;
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076     };       
-<a name="l00077"></a>00077 
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00081"></a>00081     <span class="keyword">class </span>sum_node: <span class="keyword">public</span> task {
-<a name="l00082"></a>00082         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
-<a name="l00083"></a>00083     <span class="keyword">public</span>:
-<a name="l00084"></a>00084         final_sum_type *incoming; 
-<a name="l00085"></a>00085         final_sum_type *body;
-<a name="l00086"></a>00086         Body *stuff_last;
-<a name="l00087"></a>00087     <span class="keyword">private</span>:
-<a name="l00088"></a>00088         final_sum_type *left_sum;
-<a name="l00089"></a>00089         sum_node *left;
-<a name="l00090"></a>00090         sum_node *right;     
-<a name="l00091"></a>00091         <span class="keywordtype">bool</span> left_is_final;
-<a name="l00092"></a>00092         Range range;
-<a name="l00093"></a>00093         sum_node( <span class="keyword">const</span> Range range_, <span class="keywordtype">bool</span> left_is_final_ ) : 
-<a name="l00094"></a>00094             left_sum(NULL), 
-<a name="l00095"></a>00095             left(NULL), 
-<a name="l00096"></a>00096             right(NULL), 
-<a name="l00097"></a>00097             left_is_final(left_is_final_), 
-<a name="l00098"></a>00098             range(range_)
-<a name="l00099"></a>00099         {
-<a name="l00100"></a>00100             <span class="comment">// Poison fields that will be set by second pass.</span>
-<a name="l00101"></a>00101             poison_pointer(body);
-<a name="l00102"></a>00102             poison_pointer(incoming);
-<a name="l00103"></a>00103         }
-<a name="l00104"></a>00104         task* create_child( <span class="keyword">const</span> Range& range, final_sum_type& f, sum_node* n, final_sum_type* incoming, Body* stuff_last ) {
-<a name="l00105"></a>00105             <span class="keywordflow">if</span>( !n ) {
-<a name="l00106"></a>00106                 f.recycle_as_child_of( *<span class="keyword">this</span> );
-<a name="l00107"></a>00107                 f.finish_construction( range, stuff_last );
-<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &f;
-<a name="l00109"></a>00109             } <span class="keywordflow">else</span> {
-<a name="l00110"></a>00110                 n->body = &f;
-<a name="l00111"></a>00111                 n->incoming = incoming;
-<a name="l00112"></a>00112                 n->stuff_last = stuff_last;
-<a name="l00113"></a>00113                 <span class="keywordflow">return</span> n;
-<a name="l00114"></a>00114             }
-<a name="l00115"></a>00115         }
-<a name="l00116"></a>00116         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00117"></a>00117             <span class="keywordflow">if</span>( body ) {
-<a name="l00118"></a>00118                 <span class="keywordflow">if</span>( incoming )
-<a name="l00119"></a>00119                     left_sum->body.reverse_join( incoming->body );
-<a name="l00120"></a>00120                 recycle_as_continuation();
-<a name="l00121"></a>00121                 sum_node& c = *<span class="keyword">this</span>;
-<a name="l00122"></a>00122                 task* b = c.create_child(Range(range,split()),*left_sum,right,left_sum,stuff_last);
-<a name="l00123"></a>00123                 task* a = left_is_final ? NULL : c.create_child(range,*body,left,incoming,NULL);
-<a name="l00124"></a>00124                 set_ref_count( (a!=NULL)+(b!=NULL) );
-<a name="l00125"></a>00125                 body = NULL; 
-<a name="l00126"></a>00126                 <span class="keywordflow">if</span>( a ) spawn(*b);
-<a name="l00127"></a>00127                 <span class="keywordflow">else</span> a = b;
-<a name="l00128"></a>00128                 <span class="keywordflow">return</span> a;
-<a name="l00129"></a>00129             } <span class="keywordflow">else</span> {
-<a name="l00130"></a>00130                 <span class="keywordflow">return</span> NULL;
-<a name="l00131"></a>00131             }
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133         <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="l00134"></a>00134         <span class="keyword">friend</span> <span class="keyword">class </span>start_scan;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136         <span class="keyword">template</span><<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_>
-<a name="l00137"></a>00137         <span class="keyword">friend</span> <span class="keyword">class </span>finish_scan;
-<a name="l00138"></a>00138     };
-<a name="l00139"></a>00139 
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00143"></a>00143     <span class="keyword">class </span>finish_scan: <span class="keyword">public</span> task {
-<a name="l00144"></a>00144         <span class="keyword">typedef</span> sum_node<Range,Body> sum_node_type;
-<a name="l00145"></a>00145         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
-<a name="l00146"></a>00146         final_sum_type** <span class="keyword">const</span> sum;
-<a name="l00147"></a>00147         sum_node_type*& return_slot;
-<a name="l00148"></a>00148     <span class="keyword">public</span>:
-<a name="l00149"></a>00149         final_sum_type* right_zombie;
-<a name="l00150"></a>00150         sum_node_type& result;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00153"></a>00153             __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
-<a name="l00154"></a>00154             <span class="keywordflow">if</span>( result.left )
-<a name="l00155"></a>00155                 result.left_is_final = <span class="keyword">false</span>;
-<a name="l00156"></a>00156             <span class="keywordflow">if</span>( right_zombie && sum ) 
-<a name="l00157"></a>00157                 ((*sum)->body).reverse_join(result.left_sum->body);
-<a name="l00158"></a>00158             __TBB_ASSERT( !return_slot, NULL );
-<a name="l00159"></a>00159             <span class="keywordflow">if</span>( right_zombie || result.right ) {
-<a name="l00160"></a>00160                 return_slot = &result;
-<a name="l00161"></a>00161             } <span class="keywordflow">else</span> {
-<a name="l00162"></a>00162                 destroy( result );
-<a name="l00163"></a>00163             }
-<a name="l00164"></a>00164             <span class="keywordflow">if</span>( right_zombie && !sum && !result.right ) destroy(*right_zombie);
-<a name="l00165"></a>00165             <span class="keywordflow">return</span> NULL;
-<a name="l00166"></a>00166         }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168         finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) : 
-<a name="l00169"></a>00169             sum(sum_),
-<a name="l00170"></a>00170             return_slot(return_slot_), 
-<a name="l00171"></a>00171             right_zombie(NULL),
-<a name="l00172"></a>00172             result(result_)
-<a name="l00173"></a>00173         {
-<a name="l00174"></a>00174             __TBB_ASSERT( !return_slot, NULL );
-<a name="l00175"></a>00175         }
-<a name="l00176"></a>00176     };
-<a name="l00177"></a>00177 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>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>00181     <span class="keyword">class </span>start_scan: <span class="keyword">public</span> task {
-<a name="l00182"></a>00182         <span class="keyword">typedef</span> sum_node<Range,Body> sum_node_type;
-<a name="l00183"></a>00183         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
-<a name="l00184"></a>00184         final_sum_type* body;
-<a name="l00186"></a>00186         final_sum_type** sum; 
-<a name="l00187"></a>00187         sum_node_type** return_slot;
-<a name="l00189"></a>00189         sum_node_type* parent_sum;
-<a name="l00190"></a>00190         <span class="keywordtype">bool</span> is_final;
-<a name="l00191"></a>00191         <span class="keywordtype">bool</span> is_right_child;
-<a name="l00192"></a>00192         Range range;
-<a name="l00193"></a>00193         <span class="keyword">typename</span> Partitioner::partition_type partition;
-<a name="l00194"></a>00194         <span class="comment">/*override*/</span> task* execute();
-<a name="l00195"></a>00195     <span class="keyword">public</span>:
-<a name="l00196"></a>00196         start_scan( sum_node_type*& return_slot_, start_scan& parent, sum_node_type* parent_sum_ ) :
-<a name="l00197"></a>00197             body(parent.body),
-<a name="l00198"></a>00198             sum(parent.sum),
-<a name="l00199"></a>00199             return_slot(&return_slot_),
-<a name="l00200"></a>00200             parent_sum(parent_sum_),
-<a name="l00201"></a>00201             is_final(parent.is_final),
-<a name="l00202"></a>00202             is_right_child(false),
-<a name="l00203"></a>00203             range(parent.range,split()),
-<a name="l00204"></a>00204             partition(parent.partition,split())
-<a name="l00205"></a>00205         {
-<a name="l00206"></a>00206             __TBB_ASSERT( !*return_slot, NULL );
-<a name="l00207"></a>00207         }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209         start_scan( sum_node_type*& return_slot_, <span class="keyword">const</span> Range& range_, final_sum_type& body_, <span class="keyword">const</span> Partitioner& partitioner_) :
-<a name="l00210"></a>00210             body(&body_),
-<a name="l00211"></a>00211             sum(NULL),
-<a name="l00212"></a>00212             return_slot(&return_slot_),
-<a name="l00213"></a>00213             parent_sum(NULL),
-<a name="l00214"></a>00214             is_final(true),
-<a name="l00215"></a>00215             is_right_child(false),
-<a name="l00216"></a>00216             range(range_),
-<a name="l00217"></a>00217             partition(partitioner_)
-<a name="l00218"></a>00218         {
-<a name="l00219"></a>00219             __TBB_ASSERT( !*return_slot, NULL );
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>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 ) {
-<a name="l00223"></a>00223             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00224"></a>00224                 <span class="keyword">typedef</span> internal::start_scan<Range,Body,Partitioner> start_pass1_type;
-<a name="l00225"></a>00225                 internal::sum_node<Range,Body>* root = NULL;
-<a name="l00226"></a>00226                 <span class="keyword">typedef</span> internal::final_sum<Range,Body> final_sum_type;
-<a name="l00227"></a>00227                 final_sum_type* temp_body = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) final_sum_type( body );
-<a name="l00228"></a>00228                 start_pass1_type& pass1 = *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_pass1_type(
-<a name="l00229"></a>00229                     <span class="comment">/*return_slot=*/</span>root,
-<a name="l00230"></a>00230                     range,
-<a name="l00231"></a>00231                     *temp_body,
-<a name="l00232"></a>00232                     partitioner );
-<a name="l00233"></a>00233                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( pass1 );
-<a name="l00234"></a>00234                 <span class="keywordflow">if</span>( root ) {
-<a name="l00235"></a>00235                     root->body = temp_body;
-<a name="l00236"></a>00236                     root->incoming = NULL;
-<a name="l00237"></a>00237                     root->stuff_last = &body;
-<a name="l00238"></a>00238                     <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *root );
-<a name="l00239"></a>00239                 } <span class="keywordflow">else</span> {
-<a name="l00240"></a>00240                     body.assign(temp_body->body);
-<a name="l00241"></a>00241                     temp_body->finish_construction( range, NULL );
-<a name="l00242"></a>00242                     temp_body->destroy(*temp_body);
-<a name="l00243"></a>00243                 }
-<a name="l00244"></a>00244             }
-<a name="l00245"></a>00245         }
-<a name="l00246"></a>00246     };
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     <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="l00249"></a>00249     task* start_scan<Range,Body,Partitioner>::execute() {
-<a name="l00250"></a>00250         <span class="keyword">typedef</span> internal::finish_scan<Range,Body> finish_pass1_type;
-<a name="l00251"></a>00251         finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;
-<a name="l00252"></a>00252         <span class="comment">// Inspecting p->result.left_sum would ordinarily be a race condition.</span>
-<a name="l00253"></a>00253         <span class="comment">// But we inspect it only if we are not a stolen task, in which case we</span>
-<a name="l00254"></a>00254         <span class="comment">// know that task assigning to p->result.left_sum has completed.</span>
-<a name="l00255"></a>00255         <span class="keywordtype">bool</span> treat_as_stolen = is_right_child && (is_stolen_task() || body!=p->result.left_sum);
-<a name="l00256"></a>00256         <span class="keywordflow">if</span>( treat_as_stolen ) {
-<a name="l00257"></a>00257             <span class="comment">// Invocation is for right child that has been really stolen or needs to be virtually stolen</span>
-<a name="l00258"></a>00258             p->right_zombie = body = <span class="keyword">new</span>( allocate_root() ) final_sum_type(body->body);
-<a name="l00259"></a>00259             is_final = <span class="keyword">false</span>;
-<a name="l00260"></a>00260         }
-<a name="l00261"></a>00261         task* next_task = NULL;
-<a name="l00262"></a>00262         <span class="keywordflow">if</span>( (is_right_child && !treat_as_stolen) || !range.is_divisible() || partition.should_execute_range(*<span class="keyword">this</span>) ) {
-<a name="l00263"></a>00263             <span class="keywordflow">if</span>( is_final )
-<a name="l00264"></a>00264                 (body->body)( range, final_scan_tag() );
-<a name="l00265"></a>00265             <span class="keywordflow">else</span> <span class="keywordflow">if</span>( sum )
-<a name="l00266"></a>00266                 (body->body)( range, pre_scan_tag() );
-<a name="l00267"></a>00267             <span class="keywordflow">if</span>( sum ) 
-<a name="l00268"></a>00268                 *sum = body;
-<a name="l00269"></a>00269             __TBB_ASSERT( !*return_slot, NULL );
-<a name="l00270"></a>00270         } <span class="keywordflow">else</span> {
-<a name="l00271"></a>00271             sum_node_type* result;
-<a name="l00272"></a>00272             <span class="keywordflow">if</span>( parent_sum ) 
-<a name="l00273"></a>00273                 result = <span class="keyword">new</span>(allocate_additional_child_of(*parent_sum)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
-<a name="l00274"></a>00274             <span class="keywordflow">else</span>
-<a name="l00275"></a>00275                 result = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
-<a name="l00276"></a>00276             finish_pass1_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_pass1_type(*return_slot,sum,*result);
-<a name="l00277"></a>00277             <span class="comment">// Split off right child</span>
-<a name="l00278"></a>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 );
-<a name="l00279"></a>00279             b.is_right_child = <span class="keyword">true</span>;    
-<a name="l00280"></a>00280             <span class="comment">// Left child is recycling of *this.  Must recycle this before spawning b, </span>
-<a name="l00281"></a>00281             <span class="comment">// otherwise b might complete and decrement c.ref_count() to zero, which</span>
-<a name="l00282"></a>00282             <span class="comment">// would cause c.execute() to run prematurely.</span>
-<a name="l00283"></a>00283             recycle_as_child_of(c);
-<a name="l00284"></a>00284             c.set_ref_count(2);
-<a name="l00285"></a>00285             c.spawn(b);
-<a name="l00286"></a>00286             sum = &result->left_sum;
-<a name="l00287"></a>00287             return_slot = &result->left;
-<a name="l00288"></a>00288             is_right_child = <span class="keyword">false</span>;
-<a name="l00289"></a>00289             next_task = <span class="keyword">this</span>;
-<a name="l00290"></a>00290             parent_sum = result; 
-<a name="l00291"></a>00291             __TBB_ASSERT( !*return_slot, NULL );
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> next_task;
-<a name="l00294"></a>00294     } 
-<a name="l00295"></a>00295 } <span class="comment">// namespace internal</span>
-<a name="l00297"></a>00297 <span class="comment"></span>
-<a name="l00298"></a>00298 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00299"></a>00299 
-<a name="l00317"></a>00317 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>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="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00322"></a>00322     internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
-<a name="l00323"></a>00323 }
-<a name="l00324"></a>00324 
-<a name="l00326"></a>00326 
-<a name="l00327"></a>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="a00233.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& partitioner ) {
-<a name="l00329"></a>00329     internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);
-<a name="l00330"></a>00330 }
-<a name="l00331"></a>00331 
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00335"></a><a class="code" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& partitioner ) {
-<a name="l00336"></a>00336     internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);
-<a name="l00337"></a>00337 }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 } <span class="comment">// namespace tbb</span>
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_scan_H */</span>
-<a name="l00343"></a>00343 
-</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/a00317.html b/doc/html/a00330.html
similarity index 79%
copy from doc/html/a00317.html
copy to doc/html/a00330.html
index 75f8a07..ae20a8b 100644
--- a/doc/html/a00317.html
+++ b/doc/html/a00330.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>parallel_for_each.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -50,9 +50,9 @@
 <a name="l00030"></a>00030     <span class="comment">// The class calls user function in operator()</span>
 <a name="l00031"></a>00031     <span class="keyword">template</span> <<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Iterator>
 <a name="l00032"></a>00032     <span class="keyword">class </span>parallel_for_each_body : internal::no_assign {
-<a name="l00033"></a>00033         Function &my_func;
+<a name="l00033"></a>00033         <span class="keyword">const</span> Function &my_func;
 <a name="l00034"></a>00034     <span class="keyword">public</span>:
-<a name="l00035"></a>00035         parallel_for_each_body(Function &_func) : my_func(_func) {}
+<a name="l00035"></a>00035         parallel_for_each_body(<span class="keyword">const</span> Function &_func) : my_func(_func) {}
 <a name="l00036"></a>00036         parallel_for_each_body(<span class="keyword">const</span> parallel_for_each_body<Function, Iterator> &_caller) : my_func(_caller.my_func) {}
 <a name="l00037"></a>00037 
 <a name="l00038"></a>00038         <span class="keywordtype">void</span> operator() ( <span class="keyword">typename</span> std::iterator_traits<Iterator>::value_type value )<span class="keyword"> const </span>{
@@ -64,25 +64,23 @@
 <a name="l00048"></a>00048 
 <a name="l00049"></a>00049 
 <a name="l00050"></a>00050 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00051"></a><a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">00051</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f, <a class="code" href="a00167.html">task_group_context</a> &context) {
+<a name="l00051"></a><a class="code" href="a00241.html#gcd40c32f319747e61a8f73fcfc452001">00051</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f, <a class="code" href="a00175.html">task_group_context</a> &context) {
 <a name="l00052"></a>00052     internal::parallel_for_each_body<Function, InputIterator> body(f);
 <a name="l00053"></a>00053 
-<a name="l00054"></a>00054     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
-<a name="l00055"></a>00055     <span class="keywordflow">return</span> f;
-<a name="l00056"></a>00056 }
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00060"></a><a class="code" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">00060</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f) {
-<a name="l00061"></a>00061     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body);
-<a name="l00064"></a>00064     <span class="keywordflow">return</span> f;
-<a name="l00065"></a>00065 }
+<a name="l00054"></a>00054     <a class="code" href="a00241.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 
+<a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
+<a name="l00059"></a><a class="code" href="a00241.html#gc2d710ca573f0a9bd94379cba3772def">00059</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
+<a name="l00060"></a>00060     internal::parallel_for_each_body<Function, InputIterator> body(f);
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062     <a class="code" href="a00241.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body);
+<a name="l00063"></a>00063 }
+<a name="l00064"></a>00064 
 <a name="l00066"></a>00066 
+<a name="l00067"></a>00067 } <span class="comment">// namespace</span>
 <a name="l00068"></a>00068 
-<a name="l00069"></a>00069 } <span class="comment">// namespace</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
+<a name="l00069"></a>00069 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00319.html b/doc/html/a00332.html
similarity index 52%
rename from doc/html/a00319.html
rename to doc/html/a00332.html
index 3096d79..af56fd0 100644
--- a/doc/html/a00319.html
+++ b/doc/html/a00332.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>parallel_invoke.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -51,9 +51,9 @@
 <a name="l00031"></a>00031     <span class="keyword">template</span><<span class="keyword">typename</span> function>
 <a name="l00032"></a>00032     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> task{
 <a name="l00033"></a>00033     <span class="keyword">public</span>:
-<a name="l00034"></a>00034         function_invoker(function& _function) : my_function(_function) {}
+<a name="l00034"></a>00034         function_invoker(<span class="keyword">const</span> function& _function) : my_function(_function) {}
 <a name="l00035"></a>00035     <span class="keyword">private</span>:
-<a name="l00036"></a>00036         function &my_function;
+<a name="l00036"></a>00036         <span class="keyword">const</span> function &my_function;
 <a name="l00037"></a>00037         <span class="comment">/*override*/</span>
 <a name="l00038"></a>00038         task* execute()
 <a name="l00039"></a>00039         {
@@ -66,9 +66,9 @@
 <a name="l00046"></a>00046     <span class="keyword">template</span> <size_t N, <span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
 <a name="l00047"></a>00047     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
 <a name="l00048"></a>00048     <span class="keyword">private</span>:
-<a name="l00049"></a>00049         function1& my_func1;
-<a name="l00050"></a>00050         function2& my_func2;
-<a name="l00051"></a>00051         function3& my_func3;
+<a name="l00049"></a>00049         <span class="keyword">const</span> function1& my_func1;
+<a name="l00050"></a>00050         <span class="keyword">const</span> function2& my_func2;
+<a name="l00051"></a>00051         <span class="keyword">const</span> function3& my_func3;
 <a name="l00052"></a>00052         <span class="keywordtype">bool</span> is_recycled;
 <a name="l00053"></a>00053 
 <a name="l00054"></a>00054         task* execute (){
@@ -94,7 +94,7 @@
 <a name="l00074"></a>00074         } <span class="comment">// execute</span>
 <a name="l00075"></a>00075 
 <a name="l00076"></a>00076     <span class="keyword">public</span>:
-<a name="l00077"></a>00077         spawner(function1& _func1, function2& _func2, function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
+<a name="l00077"></a>00077         spawner(<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
 <a name="l00078"></a>00078     };
 <a name="l00079"></a>00079 
 <a name="l00080"></a>00080     <span class="comment">// Creates and spawns child tasks</span>
@@ -112,7 +112,7 @@
 <a name="l00092"></a>00092         }
 <a name="l00093"></a>00093         <span class="comment">// Adds child task and spawns it</span>
 <a name="l00094"></a>00094         <span class="keyword">template</span> <<span class="keyword">typename</span> function>
-<a name="l00095"></a>00095         <span class="keywordtype">void</span> add_child (function &_func)
+<a name="l00095"></a>00095         <span class="keywordtype">void</span> add_child (<span class="keyword">const</span> function &_func)
 <a name="l00096"></a>00096         {
 <a name="l00097"></a>00097             internal::function_invoker<function>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function>(_func);
 <a name="l00098"></a>00098             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
@@ -122,7 +122,7 @@
 <a name="l00102"></a>00102         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
 <a name="l00103"></a>00103         <span class="comment">// two arguments</span>
 <a name="l00104"></a>00104         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2>
-<a name="l00105"></a>00105         <span class="keywordtype">void</span> add_children (function1& _func1, function2& _func2)
+<a name="l00105"></a>00105         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2)
 <a name="l00106"></a>00106         {
 <a name="l00107"></a>00107             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
 <a name="l00108"></a>00108             parallel_invoke_noop noop;
@@ -131,7 +131,7 @@
 <a name="l00111"></a>00111         }
 <a name="l00112"></a>00112         <span class="comment">// three arguments</span>
 <a name="l00113"></a>00113         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3>
-<a name="l00114"></a>00114         <span class="keywordtype">void</span> add_children (function1& _func1, function2& _func2, function3& _func3)
+<a name="l00114"></a>00114         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2, <span class="keyword">const</span> function3& _func3)
 <a name="l00115"></a>00115         {
 <a name="l00116"></a>00116             internal::spawner<3, function1, function2, function3>& sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);
 <a name="l00117"></a>00117             spawn(sub_root);
@@ -139,7 +139,7 @@
 <a name="l00119"></a>00119 
 <a name="l00120"></a>00120         <span class="comment">// Waits for all child tasks</span>
 <a name="l00121"></a>00121         <span class="keyword">template</span> <<span class="keyword">typename</span> F0>
-<a name="l00122"></a>00122         <span class="keywordtype">void</span> run_and_finish(F0& f0)
+<a name="l00122"></a>00122         <span class="keywordtype">void</span> run_and_finish(<span class="keyword">const</span> F0& f0)
 <a name="l00123"></a>00123         {
 <a name="l00124"></a>00124             internal::function_invoker<F0>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<F0>(f0);
 <a name="l00125"></a>00125             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
@@ -149,7 +149,7 @@
 <a name="l00129"></a>00129     <span class="comment">// The class destroys root if exception occured as well as in normal case</span>
 <a name="l00130"></a>00130     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy { 
 <a name="l00131"></a>00131     <span class="keyword">public</span>:
-<a name="l00132"></a>00132         parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
+<a name="l00132"></a>00132         parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00175.html">tbb::task_group_context</a>& context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
 <a name="l00133"></a>00133         {}
 <a name="l00134"></a>00134         ~parallel_invoke_cleaner(){
 <a name="l00135"></a>00135             root.destroy(root);
@@ -163,7 +163,7 @@
 <a name="l00148"></a>00148 <span class="comment">// parallel_invoke with user-defined context</span>
 <a name="l00149"></a>00149 <span class="comment">// two arguments</span>
 <a name="l00150"></a>00150 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
-<a name="l00151"></a><a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
+<a name="l00151"></a><a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <a class="code" href="a00175.html">tbb::task_group_context</a>& context) {
 <a name="l00152"></a>00152     internal::parallel_invoke_cleaner cleaner(2, context);
 <a name="l00153"></a>00153     internal::parallel_invoke_helper& root = cleaner.root;
 <a name="l00154"></a>00154 
@@ -174,7 +174,7 @@
 <a name="l00159"></a>00159 
 <a name="l00160"></a>00160 <span class="comment">// three arguments</span>
 <a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2 >
-<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
+<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <a class="code" href="a00175.html">tbb::task_group_context</a>& context) {
 <a name="l00163"></a>00163     internal::parallel_invoke_cleaner cleaner(3, context);
 <a name="l00164"></a>00164     internal::parallel_invoke_helper& root = cleaner.root;
 <a name="l00165"></a>00165 
@@ -186,157 +186,183 @@
 <a name="l00171"></a>00171 
 <a name="l00172"></a>00172 <span class="comment">// four arguments</span>
 <a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3>
-<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00175"></a>00175     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00176"></a>00176     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     root.add_child(f3);
-<a name="l00179"></a>00179     root.add_child(f2);
-<a name="l00180"></a>00180     root.add_child(f1);
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     root.run_and_finish(f0);
-<a name="l00183"></a>00183 }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 <span class="comment">// five arguments</span>
-<a name="l00186"></a>00186 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4 >
-<a name="l00187"></a>00187 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00188"></a>00188     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00189"></a>00189     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     root.add_children(f4, f3);
-<a name="l00192"></a>00192     root.add_children(f2, f1);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     root.run_and_finish(f0);
-<a name="l00195"></a>00195 }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="comment">// six arguments</span>
-<a name="l00198"></a>00198 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5 >
-<a name="l00199"></a>00199 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00200"></a>00200     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00201"></a>00201     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     root.add_children(f5, f4, f3);
-<a name="l00204"></a>00204     root.add_children(f2, f1);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     root.run_and_finish(f0);
-<a name="l00207"></a>00207 }
+<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3,
+<a name="l00175"></a>00175                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00176"></a>00176 {
+<a name="l00177"></a>00177     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00178"></a>00178     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180     root.add_child(f3);
+<a name="l00181"></a>00181     root.add_child(f2);
+<a name="l00182"></a>00182     root.add_child(f1);
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184     root.run_and_finish(f0);
+<a name="l00185"></a>00185 }
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187 <span class="comment">// five arguments</span>
+<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4 >
+<a name="l00189"></a>00189 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00190"></a>00190                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00191"></a>00191 {
+<a name="l00192"></a>00192     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00193"></a>00193     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195     root.add_children(f4, f3);
+<a name="l00196"></a>00196     root.add_children(f2, f1);
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     root.run_and_finish(f0);
+<a name="l00199"></a>00199 }
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 <span class="comment">// six arguments</span>
+<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
+<a name="l00203"></a>00203 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5,
+<a name="l00204"></a>00204                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00205"></a>00205 {
+<a name="l00206"></a>00206     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00207"></a>00207     internal::parallel_invoke_helper& root = cleaner.root;
 <a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="comment">// seven arguments</span>
-<a name="l00210"></a>00210 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6 >
-<a name="l00211"></a>00211 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00212"></a>00212     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00213"></a>00213     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00209"></a>00209     root.add_children(f5, f4, f3);
+<a name="l00210"></a>00210     root.add_children(f2, f1);
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212     root.run_and_finish(f0);
+<a name="l00213"></a>00213 }
 <a name="l00214"></a>00214 
-<a name="l00215"></a>00215     root.add_children(f6, f5, f4);
-<a name="l00216"></a>00216     root.add_children(f3, f2, f1);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     root.run_and_finish(f0);
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="comment">// eight arguments</span>
-<a name="l00222"></a>00222 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00223"></a>00223     <span class="keyword">typename</span> F7>
-<a name="l00224"></a>00224 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00225"></a>00225     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00226"></a>00226     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228     root.add_children(f7, f6, f5);
-<a name="l00229"></a>00229     root.add_children(f4, f3);
-<a name="l00230"></a>00230     root.add_children(f2, f1);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     root.run_and_finish(f0);
-<a name="l00233"></a>00233 }
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 <span class="comment">// nine arguments</span>
-<a name="l00236"></a>00236 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00237"></a>00237         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
-<a name="l00238"></a>00238 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00239"></a>00239     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00240"></a>00240     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242     root.add_children(f8, f7, f6);
-<a name="l00243"></a>00243     root.add_children(f5, f4, f3);
-<a name="l00244"></a>00244     root.add_children(f2, f1);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     root.run_and_finish(f0);
-<a name="l00247"></a>00247 }
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249 <span class="comment">// ten arguments</span>
-<a name="l00250"></a>00250 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00251"></a>00251         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
-<a name="l00252"></a>00252 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="code" href="a00167.html">tbb::task_group_context</a>& context) {
-<a name="l00253"></a>00253     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00254"></a>00254     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     root.add_children(f9, f8, f7);
-<a name="l00257"></a>00257     root.add_children(f6, f5, f4);
-<a name="l00258"></a>00258     root.add_children(f3, f2, f1);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     root.run_and_finish(f0);
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="comment">// two arguments</span>
-<a name="l00264"></a>00264 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
-<a name="l00265"></a>00265 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1) {
-<a name="l00266"></a>00266     task_group_context context;
-<a name="l00267"></a>00267     parallel_invoke<F0, F1>(f0, f1, context);
-<a name="l00268"></a>00268 }
-<a name="l00269"></a>00269 <span class="comment">// three arguments</span>
-<a name="l00270"></a>00270 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2>
-<a name="l00271"></a>00271 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2) {
-<a name="l00272"></a>00272     task_group_context context;
-<a name="l00273"></a>00273     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
-<a name="l00274"></a>00274 }
-<a name="l00275"></a>00275 <span class="comment">// four arguments</span>
-<a name="l00276"></a>00276 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3 >
-<a name="l00277"></a>00277 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3) {
-<a name="l00278"></a>00278     task_group_context context;
-<a name="l00279"></a>00279     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
-<a name="l00280"></a>00280 }
-<a name="l00281"></a>00281 <span class="comment">// five arguments</span>
-<a name="l00282"></a>00282 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4>
-<a name="l00283"></a>00283 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4) {
+<a name="l00215"></a>00215 <span class="comment">// seven arguments</span>
+<a name="l00216"></a>00216 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
+<a name="l00217"></a>00217 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00218"></a>00218                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6,
+<a name="l00219"></a>00219                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00220"></a>00220 {
+<a name="l00221"></a>00221     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00222"></a>00222     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224     root.add_children(f6, f5, f4);
+<a name="l00225"></a>00225     root.add_children(f3, f2, f1);
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227     root.run_and_finish(f0);
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="comment">// eight arguments</span>
+<a name="l00231"></a>00231 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00232"></a>00232          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00233"></a>00233 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00234"></a>00234                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7,
+<a name="l00235"></a>00235                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00236"></a>00236 {
+<a name="l00237"></a>00237     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00238"></a>00238     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240     root.add_children(f7, f6, f5);
+<a name="l00241"></a>00241     root.add_children(f4, f3);
+<a name="l00242"></a>00242     root.add_children(f2, f1);
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244     root.run_and_finish(f0);
+<a name="l00245"></a>00245 }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247 <span class="comment">// nine arguments</span>
+<a name="l00248"></a>00248 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00249"></a>00249          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
+<a name="l00250"></a>00250 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00251"></a>00251                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8,
+<a name="l00252"></a>00252                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00253"></a>00253 {
+<a name="l00254"></a>00254     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00255"></a>00255     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257     root.add_children(f8, f7, f6);
+<a name="l00258"></a>00258     root.add_children(f5, f4, f3);
+<a name="l00259"></a>00259     root.add_children(f2, f1);
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261     root.run_and_finish(f0);
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="comment">// ten arguments</span>
+<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00266"></a>00266          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
+<a name="l00267"></a>00267 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00268"></a>00268                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9,
+<a name="l00269"></a>00269                      <a class="code" href="a00175.html">tbb::task_group_context</a>& context)
+<a name="l00270"></a>00270 {
+<a name="l00271"></a>00271     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00272"></a>00272     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274     root.add_children(f9, f8, f7);
+<a name="l00275"></a>00275     root.add_children(f6, f5, f4);
+<a name="l00276"></a>00276     root.add_children(f3, f2, f1);
+<a name="l00277"></a>00277 
+<a name="l00278"></a>00278     root.run_and_finish(f0);
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281 <span class="comment">// two arguments</span>
+<a name="l00282"></a>00282 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
+<a name="l00283"></a>00283 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1) {
 <a name="l00284"></a>00284     task_group_context context;
-<a name="l00285"></a>00285     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
+<a name="l00285"></a>00285     parallel_invoke<F0, F1>(f0, f1, context);
 <a name="l00286"></a>00286 }
-<a name="l00287"></a>00287 <span class="comment">// six arguments</span>
-<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
-<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5) {
+<a name="l00287"></a>00287 <span class="comment">// three arguments</span>
+<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2>
+<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2) {
 <a name="l00290"></a>00290     task_group_context context;
-<a name="l00291"></a>00291     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
+<a name="l00291"></a>00291     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
 <a name="l00292"></a>00292 }
-<a name="l00293"></a>00293 <span class="comment">// seven arguments</span>
-<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
-<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6) {
+<a name="l00293"></a>00293 <span class="comment">// four arguments</span>
+<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3 >
+<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3) {
 <a name="l00296"></a>00296     task_group_context context;
-<a name="l00297"></a>00297     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
+<a name="l00297"></a>00297     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
 <a name="l00298"></a>00298 }
-<a name="l00299"></a>00299 <span class="comment">// eigth arguments</span>
-<a name="l00300"></a>00300 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00301"></a>00301         <span class="keyword">typename</span> F7>
-<a name="l00302"></a>00302 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7) {
-<a name="l00303"></a>00303     task_group_context context;
-<a name="l00304"></a>00304     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
-<a name="l00305"></a>00305 }
-<a name="l00306"></a>00306 <span class="comment">// nine arguments</span>
-<a name="l00307"></a>00307 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00308"></a>00308         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
-<a name="l00309"></a>00309 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8) {
-<a name="l00310"></a>00310     task_group_context context;
-<a name="l00311"></a>00311     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
-<a name="l00312"></a>00312 }
-<a name="l00313"></a>00313 <span class="comment">// ten arguments</span>
-<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
-<a name="l00315"></a>00315         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
-<a name="l00316"></a>00316 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9) {
-<a name="l00317"></a>00317     task_group_context context;
-<a name="l00318"></a>00318     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
-<a name="l00319"></a>00319 }
-<a name="l00320"></a>00320 
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323 } <span class="comment">// namespace</span>
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
+<a name="l00299"></a>00299 <span class="comment">// five arguments</span>
+<a name="l00300"></a>00300 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4>
+<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4) {
+<a name="l00302"></a>00302     task_group_context context;
+<a name="l00303"></a>00303     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
+<a name="l00304"></a>00304 }
+<a name="l00305"></a>00305 <span class="comment">// six arguments</span>
+<a name="l00306"></a>00306 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5>
+<a name="l00307"></a>00307 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4, <span class="keyword">const</span> F5& f5) {
+<a name="l00308"></a>00308     task_group_context context;
+<a name="l00309"></a>00309     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
+<a name="l00310"></a>00310 }
+<a name="l00311"></a>00311 <span class="comment">// seven arguments</span>
+<a name="l00312"></a>00312 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6>
+<a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00314"></a>00314                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6)
+<a name="l00315"></a>00315 {
+<a name="l00316"></a>00316     task_group_context context;
+<a name="l00317"></a>00317     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
+<a name="l00318"></a>00318 }
+<a name="l00319"></a>00319 <span class="comment">// eigth arguments</span>
+<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, 
+<a name="l00321"></a>00321          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00322"></a>00322 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00323"></a>00323                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7)
+<a name="l00324"></a>00324 {
+<a name="l00325"></a>00325     task_group_context context;
+<a name="l00326"></a>00326     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328 <span class="comment">// nine arguments</span>
+<a name="l00329"></a>00329 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00330"></a>00330          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8>
+<a name="l00331"></a>00331 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00332"></a>00332                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8)
+<a name="l00333"></a>00333 {
+<a name="l00334"></a>00334     task_group_context context;
+<a name="l00335"></a>00335     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337 <span class="comment">// ten arguments</span>
+<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4,
+<a name="l00339"></a>00339          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9>
+<a name="l00340"></a>00340 <span class="keywordtype">void</span> <a class="code" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <span class="keyword">const</span> F2& f2, <span class="keyword">const</span> F3& f3, <span class="keyword">const</span> F4& f4,
+<a name="l00341"></a>00341                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7, <span class="keyword">const</span> F8& f8, <span class="keyword">const</span> F9& f9)
+<a name="l00342"></a>00342 {
+<a name="l00343"></a>00343     task_group_context context;
+<a name="l00344"></a>00344     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
+<a name="l00345"></a>00345 }
+<a name="l00346"></a>00346 
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349 } <span class="comment">// namespace</span>
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00334.html b/doc/html/a00334.html
deleted file mode 100644
index fe8795c..0000000
--- a/doc/html/a00334.html
+++ /dev/null
@@ -1,225 +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">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_for.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <algorithm></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <iterator></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <functional></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
-<a name="l00031"></a>00031 
-<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 
-<a name="l00036"></a>00036 
-<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00040"></a>00040 <span class="keyword">class </span>quick_sort_range: <span class="keyword">private</span> no_assign {
-<a name="l00041"></a>00041 
-<a name="l00042"></a>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>{
-<a name="l00043"></a>00043         <span class="keywordflow">return</span> comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
-<a name="l00044"></a>00044                                         : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
-<a name="l00045"></a>00045     }
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047     <span class="keyword">inline</span> size_t pseudo_median_of_nine( <span class="keyword">const</span> RandomAccessIterator &array, <span class="keyword">const</span> quick_sort_range &range )<span class="keyword"> const </span>{
-<a name="l00048"></a>00048         size_t offset = range.size/8u;
-<a name="l00049"></a>00049         <span class="keywordflow">return</span> median_of_three(array, 
-<a name="l00050"></a>00050                                median_of_three(array, 0, offset, offset*2),
-<a name="l00051"></a>00051                                median_of_three(array, offset*3, offset*4, offset*5),
-<a name="l00052"></a>00052                                median_of_three(array, offset*6, offset*7, range.size - 1) );
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     }
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">public</span>:
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
-<a name="l00059"></a>00059     <span class="keyword">const</span> Compare &comp;
-<a name="l00060"></a>00060     RandomAccessIterator begin;
-<a name="l00061"></a>00061     size_t size;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     quick_sort_range( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &comp_ ) :
-<a name="l00064"></a>00064         comp(comp_), begin(begin_), size(size_) {}
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
-<a name="l00067"></a>00067     <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size>=grainsize;}
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
-<a name="l00070"></a>00070         RandomAccessIterator array = range.begin;
-<a name="l00071"></a>00071         RandomAccessIterator key0 = range.begin; 
-<a name="l00072"></a>00072         size_t m = pseudo_median_of_nine(array, range);
-<a name="l00073"></a>00073         <span class="keywordflow">if</span> (m) std::swap ( array[0], array[m] );
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075         size_t i=0;
-<a name="l00076"></a>00076         size_t j=range.size;
-<a name="l00077"></a>00077         <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
-<a name="l00078"></a>00078         <span class="keywordflow">for</span>(;;) {
-<a name="l00079"></a>00079             __TBB_ASSERT( i<j, NULL );
-<a name="l00080"></a>00080             <span class="comment">// Loop must terminate since array[l]==*key0.</span>
-<a name="l00081"></a>00081             <span class="keywordflow">do</span> {
-<a name="l00082"></a>00082                 --j;
-<a name="l00083"></a>00083                 __TBB_ASSERT( i<=j, <span class="stringliteral">"bad ordering relation?"</span> );
-<a name="l00084"></a>00084             } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
-<a name="l00085"></a>00085             <span class="keywordflow">do</span> {
-<a name="l00086"></a>00086                 __TBB_ASSERT( i<=j, NULL );
-<a name="l00087"></a>00087                 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-<a name="l00088"></a>00088                 ++i;
-<a name="l00089"></a>00089             } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
-<a name="l00090"></a>00090             <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-<a name="l00091"></a>00091             std::swap( array[i], array[j] );
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093 partition:
-<a name="l00094"></a>00094         <span class="comment">// Put the partition key were it belongs</span>
-<a name="l00095"></a>00095         std::swap( array[j], *key0 );
-<a name="l00096"></a>00096         <span class="comment">// array[l..j) is less or equal to key.</span>
-<a name="l00097"></a>00097         <span class="comment">// array(j..r) is greater or equal to key.</span>
-<a name="l00098"></a>00098         <span class="comment">// array[j] is equal to key</span>
-<a name="l00099"></a>00099         i=j+1;
-<a name="l00100"></a>00100         begin = array+i;
-<a name="l00101"></a>00101         size = range.size-i;
-<a name="l00102"></a>00102         range.size = j;
-<a name="l00103"></a>00103     }
-<a name="l00104"></a>00104 };
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00109"></a>00109 <span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
-<a name="l00110"></a>00110     <span class="keyword">const</span> Compare &comp;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
-<a name="l00116"></a>00116         task &my_task = <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
-<a name="l00117"></a>00117         RandomAccessIterator my_end = range.end();
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119         <span class="keywordtype">int</span> i = 0;
-<a name="l00120"></a>00120         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
-<a name="l00121"></a>00121             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
-<a name="l00122"></a>00122           
-<a name="l00123"></a>00123             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
-<a name="l00124"></a>00124             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
-<a name="l00125"></a>00125                 my_task.cancel_group_execution();
-<a name="l00126"></a>00126                 <span class="keywordflow">break</span>;
-<a name="l00127"></a>00127             }
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 };
-<a name="l00132"></a>00132 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00136"></a>00136 <span class="keyword">struct </span>quick_sort_body {
-<a name="l00137"></a>00137     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
-<a name="l00138"></a>00138         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
-<a name="l00139"></a>00139         std::sort( range.begin, range.begin + range.size, range.comp );
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141 };
-<a name="l00142"></a>00142 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00146"></a>00146 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
-<a name="l00147"></a>00147     task_group_context my_context;
-<a name="l00148"></a>00148     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
-<a name="l00151"></a>00151     RandomAccessIterator k;
-<a name="l00152"></a>00152     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
-<a name="l00153"></a>00153         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
-<a name="l00154"></a>00154             <span class="keywordflow">goto</span> do_parallel_quick_sort;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
-<a name="l00159"></a>00159                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
-<a name="l00160"></a>00160                   auto_partitioner(),
-<a name="l00161"></a>00161                   my_context);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
-<a name="l00164"></a>00164 do_parallel_quick_sort:
-<a name="l00165"></a>00165         <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
-<a name="l00166"></a>00166                       quick_sort_body<RandomAccessIterator,Compare>(),
-<a name="l00167"></a>00167                       auto_partitioner() );
-<a name="l00168"></a>00168 }
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
-<a name="l00172"></a>00172 <span class="comment"></span>
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 
-<a name="l00188"></a>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="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
-<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
-<a name="l00191"></a>00191     <span class="keywordflow">if</span>( end > begin ) {
-<a name="l00192"></a>00192         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
-<a name="l00193"></a>00193             std::sort(begin, end, comp);
-<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195             internal::parallel_quick_sort(begin, end, comp);
-<a name="l00196"></a>00196         }
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
-<a name="l00203"></a><a class="code" href="a00233.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
-<a name="l00204"></a>00204     <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
-<a name="l00205"></a>00205 }
-<a name="l00206"></a>00206 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00210"></a><a class="code" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
-<a name="l00211"></a>00211     <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
-<a name="l00212"></a>00212 }   
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
-<a name="l00219"></a>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/a00338.html b/doc/html/a00338.html
index 4ad6cfc..aa4733d 100644
--- a/doc/html/a00338.html
+++ b/doc/html/a00338.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_while.h Source File</title>
+<title>parallel_reduce.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>parallel_while.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,152 +39,316 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_while</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_while</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
 <a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <new></span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <new></span>
 <a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00030"></a>00030 <span class="keyword">class </span>parallel_while;
-<a name="l00031"></a>00031 
-<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035     <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body> <span class="keyword">class </span>while_task;
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
+<a name="l00030"></a>00030 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
+<a name="l00033"></a>00033 
+<a name="l00035"></a>00035     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
 <a name="l00036"></a>00036 
-<a name="l00038"></a>00038 
-<a name="l00040"></a>00040     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00041"></a>00041     <span class="keyword">class </span>while_iteration_task: <span class="keyword">public</span> task {
-<a name="l00042"></a>00042         <span class="keyword">const</span> Body& my_body;
-<a name="l00043"></a>00043         <span class="keyword">typename</span> Body::argument_type my_value;
-<a name="l00044"></a>00044         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00045"></a>00045             my_body(my_value); 
-<a name="l00046"></a>00046             <span class="keywordflow">return</span> NULL;
-<a name="l00047"></a>00047         }
-<a name="l00048"></a>00048         while_iteration_task( <span class="keyword">const</span> <span class="keyword">typename</span> Body::argument_type& value, <span class="keyword">const</span> Body& body ) : 
-<a name="l00049"></a>00049             my_body(body), my_value(value)
-<a name="l00050"></a>00050         {}
-<a name="l00051"></a>00051         <span class="keyword">template</span><<span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span>while_group_task;
-<a name="l00052"></a>00052         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00149.html">tbb::parallel_while</a><Body>;
-<a name="l00053"></a>00053     };
-<a name="l00054"></a>00054 
-<a name="l00056"></a>00056 
-<a name="l00058"></a>00058     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00059"></a>00059     <span class="keyword">class </span>while_group_task: <span class="keyword">public</span> task {
-<a name="l00060"></a>00060         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
-<a name="l00061"></a>00061         <span class="keyword">const</span> Body& my_body;
-<a name="l00062"></a>00062         size_t size;
-<a name="l00063"></a>00063         <span class="keyword">typename</span> Body::argument_type my_arg[max_arg_size];
-<a name="l00064"></a>00064         while_group_task( <span class="keyword">const</span> Body& body ) : my_body(body), size(0) {} 
-<a name="l00065"></a>00065         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00066"></a>00066             <span class="keyword">typedef</span> while_iteration_task<Body> iteration_type;
-<a name="l00067"></a>00067             __TBB_ASSERT( size>0, NULL );
-<a name="l00068"></a>00068             task_list list;
-<a name="l00069"></a>00069             task* t; 
-<a name="l00070"></a>00070             size_t k=0; 
-<a name="l00071"></a>00071             <span class="keywordflow">for</span>(;;) {
-<a name="l00072"></a>00072                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_arg[k],my_body); 
-<a name="l00073"></a>00073                 <span class="keywordflow">if</span>( ++k==size ) <span class="keywordflow">break</span>;
-<a name="l00074"></a>00074                 list.push_back(*t);
-<a name="l00075"></a>00075             }
-<a name="l00076"></a>00076             set_ref_count(<span class="keywordtype">int</span>(k+1));
-<a name="l00077"></a>00077             spawn(list);
-<a name="l00078"></a>00078             spawn_and_wait_for_all(*t);
-<a name="l00079"></a>00079             <span class="keywordflow">return</span> NULL;
-<a name="l00080"></a>00080         }
-<a name="l00081"></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>while_task;
-<a name="l00082"></a>00082     };
-<a name="l00083"></a>00083     
-<a name="l00085"></a>00085 
-<a name="l00087"></a>00087     <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body>
-<a name="l00088"></a>00088     <span class="keyword">class </span>while_task: <span class="keyword">public</span> task {
-<a name="l00089"></a>00089         Stream& my_stream;
-<a name="l00090"></a>00090         <span class="keyword">const</span> Body& my_body;
-<a name="l00091"></a>00091         empty_task& my_barrier;
-<a name="l00092"></a>00092         <span class="comment">/*override*/</span> task* execute() {
-<a name="l00093"></a>00093             <span class="keyword">typedef</span> while_group_task<Body> block_type;
-<a name="l00094"></a>00094             block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(my_barrier) ) block_type(my_body);
-<a name="l00095"></a>00095             size_t k=0; 
-<a name="l00096"></a>00096             <span class="keywordflow">while</span>( my_stream.pop_if_present(t.my_arg[k]) ) {
-<a name="l00097"></a>00097                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
-<a name="l00098"></a>00098                     <span class="comment">// There might be more iterations.</span>
-<a name="l00099"></a>00099                     recycle_to_reexecute();
-<a name="l00100"></a>00100                     <span class="keywordflow">break</span>;
-<a name="l00101"></a>00101                 }
-<a name="l00102"></a>00102             }
-<a name="l00103"></a>00103             <span class="keywordflow">if</span>( k==0 ) {
-<a name="l00104"></a>00104                 destroy(t);
-<a name="l00105"></a>00105                 <span class="keywordflow">return</span> NULL;
-<a name="l00106"></a>00106             } <span class="keywordflow">else</span> {
-<a name="l00107"></a>00107                 t.size = k;
-<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &t;
-<a name="l00109"></a>00109             }
+<a name="l00038"></a>00038     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00039"></a>00039 
+<a name="l00040"></a>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 ) {
+<a name="l00041"></a>00041 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>        itt_store_pointer_with_release_v3(&dst,src);
+<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>        __TBB_store_with_release(dst,src);
+<a name="l00045"></a>00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00046"></a>00046     }
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T* parallel_reduce_load_body( T*& src ) {
+<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordflow">return</span> static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
+<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
+<a name="l00053"></a>00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00054"></a>00054     }
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
+<a name="l00059"></a>00059 
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00063"></a>00063     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> task {
+<a name="l00065"></a>00065         Body* my_body;
+<a name="l00066"></a>00066         <span class="keywordtype">bool</span> has_right_zombie;
+<a name="l00067"></a>00067         <span class="keyword">const</span> reduction_context my_context;
+<a name="l00068"></a>00068         aligned_space<Body,1> zombie_space;
+<a name="l00069"></a>00069         finish_reduce( <span class="keywordtype">char</span> context ) : 
+<a name="l00070"></a>00070             my_body(NULL),
+<a name="l00071"></a>00071             has_right_zombie(false),
+<a name="l00072"></a>00072             my_context(context)
+<a name="l00073"></a>00073         {
+<a name="l00074"></a>00074         }
+<a name="l00075"></a>00075         task* execute() {
+<a name="l00076"></a>00076             <span class="keywordflow">if</span>( has_right_zombie ) {
+<a name="l00077"></a>00077                 <span class="comment">// Right child was stolen.</span>
+<a name="l00078"></a>00078                 Body* s = zombie_space.begin();
+<a name="l00079"></a>00079                 my_body->join( *s );
+<a name="l00080"></a>00080                 s->~Body();
+<a name="l00081"></a>00081             }
+<a name="l00082"></a>00082             <span class="keywordflow">if</span>( my_context==1 ) 
+<a name="l00083"></a>00083                 parallel_reduce_store_body( static_cast<finish_reduce*>(parent())->my_body, my_body );
+<a name="l00084"></a>00084             <span class="keywordflow">return</span> NULL;
+<a name="l00085"></a>00085         }       
+<a name="l00086"></a>00086         <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="l00087"></a>00087         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
+<a name="l00088"></a>00088     };
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     <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="l00093"></a>00093     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
+<a name="l00094"></a>00094         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
+<a name="l00095"></a>00095         Body* my_body;
+<a name="l00096"></a>00096         Range my_range;
+<a name="l00097"></a>00097         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00098"></a>00098         reduction_context my_context;
+<a name="l00099"></a>00099         <span class="comment">/*override*/</span> task* execute();
+<a name="l00100"></a>00100         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
+<a name="l00101"></a>00101         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
+<a name="l00102"></a>00102     
+<a name="l00104"></a>00104         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
+<a name="l00105"></a>00105             my_body(body),
+<a name="l00106"></a>00106             my_range(range),
+<a name="l00107"></a>00107             my_partition(partitioner),
+<a name="l00108"></a>00108             my_context(0)
+<a name="l00109"></a>00109         {
 <a name="l00110"></a>00110         }
-<a name="l00111"></a>00111         while_task( Stream& stream, <span class="keyword">const</span> Body& body, empty_task& barrier ) : 
-<a name="l00112"></a>00112             my_stream(stream),
-<a name="l00113"></a>00113             my_body(body),
-<a name="l00114"></a>00114             my_barrier(barrier)
-<a name="l00115"></a>00115         {} 
-<a name="l00116"></a>00116         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00149.html">tbb::parallel_while</a><Body>;
-<a name="l00117"></a>00117     };
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 } <span class="comment">// namespace internal</span>
-<a name="l00121"></a>00121 <span class="comment"></span>
-<a name="l00123"></a>00123 
-<a name="l00128"></a>00128 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00129"></a><a class="code" href="a00149.html">00129</a> <span class="keyword">class </span><a class="code" href="a00149.html">parallel_while</a>: internal::no_copy {
-<a name="l00130"></a>00130 <span class="keyword">public</span>:
-<a name="l00132"></a><a class="code" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
-<a name="l00133"></a>00133 
-<a name="l00135"></a><a class="code" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>() {
-<a name="l00136"></a>00136         <span class="keywordflow">if</span>( my_barrier ) {
-<a name="l00137"></a>00137             my_barrier-><a class="code" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);    
-<a name="l00138"></a>00138             my_barrier = NULL;
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113         start_reduce( start_reduce& parent, split ) :
+<a name="l00114"></a>00114             my_body(parent.my_body),
+<a name="l00115"></a>00115             my_range(parent.my_range,split()),
+<a name="l00116"></a>00116             my_partition(parent.my_partition,split()),
+<a name="l00117"></a>00117             my_context(2)
+<a name="l00118"></a>00118         {
+<a name="l00119"></a>00119             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00120"></a>00120             parent.my_context = 1;
+<a name="l00121"></a>00121         }
+<a name="l00123"></a>00123         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00124"></a>00124             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00125"></a>00125         }
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00128"></a>00128         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
+<a name="l00129"></a>00129             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00130"></a>00130 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00131"></a>00131                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
+<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00134"></a>00134                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00135"></a>00135                 task_group_context context;
+<a name="l00136"></a>00136                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00137"></a>00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00138"></a>00138             }
 <a name="l00139"></a>00139         }
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141 
-<a name="l00143"></a><a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>;
-<a name="l00144"></a>00144 
-<a name="l00146"></a>00146 
-<a name="l00149"></a>00149     <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
-<a name="l00150"></a>00150     <span class="keywordtype">void</span> <a class="code" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>( Stream& stream, <span class="keyword">const</span> Body& body );
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="keywordtype">void</span> <a class="code" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>& item );
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="keyword">private</span>:
-<a name="l00157"></a>00157     <span class="keyword">const</span> Body* my_body;
-<a name="l00158"></a>00158     <a class="code" href="a00137.html">empty_task</a>* my_barrier;
-<a name="l00159"></a>00159 };
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00162"></a>00162 <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
-<a name="l00163"></a><a class="code" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00149.html">parallel_while<Body>::run</a>( Stream& stream, <span class="keyword">const</span> Body& body ) {
-<a name="l00164"></a>00164     <span class="keyword">using namespace </span>internal;
-<a name="l00165"></a>00165     <a class="code" href="a00137.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00137.html">empty_task</a>();
-<a name="l00166"></a>00166     my_body = &body;
-<a name="l00167"></a>00167     my_barrier = &barrier;
-<a name="l00168"></a>00168     my_barrier-><a class="code" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(2);
-<a name="l00169"></a>00169     while_task<Stream,Body>& w = *<span class="keyword">new</span>( my_barrier-><a class="code" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
-<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
-<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);
-<a name="l00172"></a>00172     my_barrier = NULL;
-<a name="l00173"></a>00173     my_body = NULL;
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00177"></a><a class="code" href="a00149.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00149.html">parallel_while<Body>::add</a>( <span class="keyword">const</span> value_type& item ) {
-<a name="l00178"></a>00178     __TBB_ASSERT(my_barrier,<span class="stringliteral">"attempt to add to parallel_while that is not running"</span>);
-<a name="l00179"></a>00179     <span class="keyword">typedef</span> internal::while_iteration_task<Body> iteration_type;
-<a name="l00180"></a>00180     iteration_type& i = *<span class="keyword">new</span>( <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(*my_barrier) ) iteration_type(item,*my_body);
-<a name="l00181"></a>00181     <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>( i );
-<a name="l00182"></a>00182 }
+<a name="l00140"></a>00140 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {
+<a name="l00142"></a>00142             <span class="keywordflow">if</span>( !range.empty() ) 
+<a name="l00143"></a>00143                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00144"></a>00144         }
+<a name="l00145"></a>00145 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00146"></a>00146     };
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     <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="l00149"></a>00149     task* start_reduce<Range,Body,Partitioner>::execute() {
+<a name="l00150"></a>00150         <span class="keywordflow">if</span>( my_context==2 ) {
+<a name="l00151"></a>00151             finish_type* p = static_cast<finish_type*>(parent() );
+<a name="l00152"></a>00152             <span class="keywordflow">if</span>( !parallel_reduce_load_body(p->my_body) ) {
+<a name="l00153"></a>00153                 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,split());
+<a name="l00154"></a>00154                 p->has_right_zombie = <span class="keyword">true</span>;
+<a name="l00155"></a>00155             } 
+<a name="l00156"></a>00156         }
+<a name="l00157"></a>00157         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00158"></a>00158             (*my_body)( my_range );
+<a name="l00159"></a>00159             <span class="keywordflow">if</span>( my_context==1 ) 
+<a name="l00160"></a>00160                 parallel_reduce_store_body(static_cast<finish_type*>(parent())->my_body, my_body );
+<a name="l00161"></a>00161             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
+<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
+<a name="l00163"></a>00163             finish_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_type(my_context);
+<a name="l00164"></a>00164             recycle_as_child_of(c);
+<a name="l00165"></a>00165             c.set_ref_count(2);    
+<a name="l00166"></a>00166             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00167"></a>00167             start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,split());
+<a name="l00168"></a>00168             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
+<a name="l00169"></a>00169             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00170"></a>00170         }
+<a name="l00171"></a>00171     } 
+<a name="l00172"></a>00172 
+<a name="l00174"></a>00174 
+<a name="l00178"></a>00178     <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="l00179"></a>00179     <span class="keyword">class </span>lambda_reduce_body {
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
+<a name="l00182"></a>00182 <span class="comment">//       (might require some performance measurements)</span>
 <a name="l00183"></a>00183 
-<a name="l00184"></a>00184 } <span class="comment">// namespace </span>
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_while */</span>
+<a name="l00184"></a>00184         <span class="keyword">const</span> Value&     identity_element;
+<a name="l00185"></a>00185         <span class="keyword">const</span> RealBody&  my_real_body;
+<a name="l00186"></a>00186         <span class="keyword">const</span> Reduction& my_reduction;
+<a name="l00187"></a>00187         Value            my_value;
+<a name="l00188"></a>00188         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
+<a name="l00189"></a>00189     <span class="keyword">public</span>:
+<a name="l00190"></a>00190         lambda_reduce_body( <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& body, <span class="keyword">const</span> Reduction& reduction )
+<a name="l00191"></a>00191             : identity_element(identity)
+<a name="l00192"></a>00192             , my_real_body(body)
+<a name="l00193"></a>00193             , my_reduction(reduction)
+<a name="l00194"></a>00194             , my_value(identity)
+<a name="l00195"></a>00195         { }
+<a name="l00196"></a>00196         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
+<a name="l00197"></a>00197             : identity_element(other.identity_element)
+<a name="l00198"></a>00198             , my_real_body(other.my_real_body)
+<a name="l00199"></a>00199             , my_reduction(other.my_reduction)
+<a name="l00200"></a>00200             , my_value(other.my_value)
+<a name="l00201"></a>00201         { }
+<a name="l00202"></a>00202         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00173.html">tbb::split</a> )
+<a name="l00203"></a>00203             : identity_element(other.identity_element)
+<a name="l00204"></a>00204             , my_real_body(other.my_real_body)
+<a name="l00205"></a>00205             , my_reduction(other.my_reduction)
+<a name="l00206"></a>00206             , my_value(other.identity_element)
+<a name="l00207"></a>00207         { }
+<a name="l00208"></a>00208         <span class="keywordtype">void</span> operator()(Range& range) {
+<a name="l00209"></a>00209             my_value = my_real_body(range, const_cast<const Value&>(my_value));
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
+<a name="l00212"></a>00212             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
+<a name="l00213"></a>00213         }
+<a name="l00214"></a>00214         Value result()<span class="keyword"> const </span>{
+<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_value;
+<a name="l00216"></a>00216         }
+<a name="l00217"></a>00217     };
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 } <span class="comment">// namespace internal</span>
+<a name="l00221"></a>00221 <span class="comment"></span>
+<a name="l00222"></a>00222 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00223"></a>00223 
+<a name="l00242"></a>00242 
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00246"></a><a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">00246</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00247"></a>00247     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00253"></a><a class="code" href="a00241.html#gec1b7c03f9da909bef5db12e3d41bed3">00253</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner ) {
+<a name="l00254"></a>00254     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256 
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00260"></a><a class="code" href="a00241.html#g18a19157e6245992fc00ca0adeb7dd37">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner ) {
+<a name="l00261"></a>00261     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00267"></a><a class="code" href="a00241.html#gc61e73fcc36c92d79a217fc355ff4a6b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00268"></a>00268     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>
+<a name="l00274"></a>00274 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00275"></a><a class="code" href="a00241.html#g45cb00c42a18e334bbde8b7535afe460">00275</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_cont [...]
+<a name="l00276"></a>00276     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00282"></a><a class="code" href="a00241.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00282</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00283"></a>00283     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
+<a name="l00284"></a>00284 }
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00289"></a><a class="code" href="a00241.html#gd9ac3a3811060314695f33b703c6e11b">00289</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00290"></a>00290     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
+<a name="l00291"></a>00291 }
+<a name="l00292"></a>00292 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00293"></a>00293 
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299 <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="l00300"></a><a class="code" href="a00241.html#gc9412e09fb01fcad8c018ea9cffb28ef">00300</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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 ) {
+<a name="l00301"></a>00301     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00302"></a>00302     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
+<a name="l00303"></a>00303                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00304"></a>00304     <span class="keywordflow">return</span> body.result();
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309 <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="l00310"></a><a class="code" href="a00241.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00310</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00311"></a>00311                        <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner ) {
+<a name="l00312"></a>00312     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00313"></a>00313     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>>
+<a name="l00314"></a>00314                           ::run(range, body, partitioner );
+<a name="l00315"></a>00315     <span class="keywordflow">return</span> body.result();
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320 <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="l00321"></a><a class="code" href="a00241.html#gb175401f0729e40dd2c5860a17c14385">00321</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00322"></a>00322                        <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner ) {
+<a name="l00323"></a>00323     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00324"></a>00324     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>>
+<a name="l00325"></a>00325                           ::run( range, body, partitioner );
+<a name="l00326"></a>00326     <span class="keywordflow">return</span> body.result();
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328 
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331 <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="l00332"></a><a class="code" href="a00241.html#gb7f1f1828ae2b330ce05b8513a495154">00332</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00333"></a>00333                        <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00334"></a>00334     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00335"></a>00335     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00120.html">affinity_partitioner</a>>
+<a name="l00336"></a>00336                                         ::run( range, body, partitioner );
+<a name="l00337"></a>00337     <span class="keywordflow">return</span> body.result();
+<a name="l00338"></a>00338 }
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span>
+<a name="l00343"></a>00343 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
+<a name="l00344"></a><a class="code" href="a00241.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00344</a> <span class="preprocessor"></span>Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00345"></a>00345                        <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00346"></a>00346     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00347"></a>00347     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>>
+<a name="l00348"></a>00348                           ::run( range, body, partitioner, context );
+<a name="l00349"></a>00349     <span class="keywordflow">return</span> body.result();
+<a name="l00350"></a>00350 }
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 <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="l00355"></a><a class="code" href="a00241.html#g630c90a399937d9d4ae70ff883186dfd">00355</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00356"></a>00356                        <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00357"></a>00357     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00358"></a>00358     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>>
+<a name="l00359"></a>00359                           ::run( range, body, partitioner, context );
+<a name="l00360"></a>00360     <span class="keywordflow">return</span> body.result();
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362 
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365 <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="l00366"></a><a class="code" href="a00241.html#g496bd7eadb3b97495ccb5655ef90319e">00366</a> Value <a class="code" href="a00241.html#g1b3d59c5eb62683c5754db6970392fa3">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,
+<a name="l00367"></a>00367                        <a class="code" href="a00120.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00175.html">task_group_context</a>& context ) {
+<a name="l00368"></a>00368     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00369"></a>00369     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00120.html">affinity_partitioner</a>>
+<a name="l00370"></a>00370                                         ::run( range, body, partitioner, context );
+<a name="l00371"></a>00371     <span class="keywordflow">return</span> body.result();
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00374"></a>00374 
+<a name="l00375"></a>00375 
+<a name="l00376"></a>00376 } <span class="comment">// namespace tbb</span>
+<a name="l00377"></a>00377 
+<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
+<a name="l00379"></a>00379 
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00342.html b/doc/html/a00342.html
index aef9058..5ad4bab 100644
--- a/doc/html/a00342.html
+++ b/doc/html/a00342.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>partitioner.h Source File</title>
+<title>parallel_scan.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>partitioner.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>parallel_scan.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,188 +39,297 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_partitioner_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_partitioner_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_scan_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_scan_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
 <a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
-<a name="l00027"></a>00027 <span class="keyword">class </span>affinity_partitioner;
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <new></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "partitioner.h"</span>
 <a name="l00028"></a>00028 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
-<a name="l00031"></a>00031 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
+<a name="l00030"></a>00030 
 <a name="l00032"></a>00032 
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">class </span>affinity_partitioner_base_v3: no_copy {
-<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00115.html">tbb::affinity_partitioner</a>;
+<a name="l00033"></a><a class="code" href="a00159.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00159.html">pre_scan_tag</a> {
+<a name="l00034"></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>;}
+<a name="l00035"></a>00035 };
+<a name="l00036"></a>00036 
 <a name="l00038"></a>00038 
-<a name="l00039"></a>00039     affinity_id* my_array;
-<a name="l00041"></a>00041     size_t my_size;
-<a name="l00043"></a>00043     affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}
-<a name="l00045"></a>00045     ~affinity_partitioner_base_v3() {resize(0);}
+<a name="l00039"></a><a class="code" href="a00145.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00145.html">final_scan_tag</a> {
+<a name="l00040"></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>;}
+<a name="l00041"></a>00041 };
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>internal {
+<a name="l00045"></a>00045 
 <a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
-<a name="l00049"></a>00049     <span class="keyword">friend</span> <span class="keyword">class </span>affinity_partition_type;
-<a name="l00050"></a>00050 };
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053 <span class="keyword">class </span>partition_type_base {
-<a name="l00054"></a>00054 <span class="keyword">public</span>:
-<a name="l00055"></a>00055     <span class="keywordtype">void</span> set_affinity( task & ) {}
-<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
-<a name="l00057"></a>00057     task* continue_after_execute_range( task& ) {<span class="keywordflow">return</span> NULL;}
-<a name="l00058"></a>00058     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00059"></a>00059     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, task& a, task& b ) {
-<a name="l00060"></a>00060         a.spawn(b);
-<a name="l00061"></a>00061     }
-<a name="l00062"></a>00062 };
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">class </span>affinity_partition_type;
-<a name="l00065"></a>00065 
-<a name="l00066"></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>start_for;
-<a name="l00067"></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>start_reduce;
-<a name="l00068"></a>00068 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">class </span>start_reduce_with_affinity;
-<a name="l00069"></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>start_scan;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 } <span class="comment">// namespace internal</span>
-<a name="l00073"></a>00073 <span class="comment"></span>
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00160.html">00077</a> <span class="keyword">class </span><a class="code" href="a00160.html">simple_partitioner</a> {
-<a name="l00078"></a>00078 <span class="keyword">public</span>:
-<a name="l00079"></a>00079     <a class="code" href="a00160.html">simple_partitioner</a>() {}
-<a name="l00080"></a>00080 <span class="keyword">private</span>:
-<a name="l00081"></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>internal::start_for;
-<a name="l00082"></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>internal::start_reduce;
-<a name="l00083"></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>internal::start_scan;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
-<a name="l00086"></a>00086     <span class="keyword">public</span>:
-<a name="l00087"></a>00087         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& ) {}
-<a name="l00089"></a>00089         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00165.html">split</a> ) {}
-<a name="l00090"></a>00090     };
-<a name="l00091"></a>00091 };
-<a name="l00092"></a>00092 
-<a name="l00094"></a>00094 
-<a name="l00097"></a><a class="code" href="a00120.html">00097</a> <span class="keyword">class </span><a class="code" href="a00120.html">auto_partitioner</a> {
-<a name="l00098"></a>00098 <span class="keyword">public</span>:
-<a name="l00099"></a>00099     <a class="code" href="a00120.html">auto_partitioner</a>() {}
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">private</span>:
-<a name="l00102"></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>internal::start_for;
-<a name="l00103"></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>internal::start_reduce;
-<a name="l00104"></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>internal::start_scan;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
-<a name="l00107"></a>00107         size_t num_chunks;
-<a name="l00108"></a>00108         <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
-<a name="l00109"></a>00109 <span class="keyword">public</span>:
-<a name="l00110"></a>00110         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a> &t) {
-<a name="l00111"></a>00111             <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
-<a name="l00112"></a>00112                 num_chunks = VICTIM_CHUNKS;
-<a name="l00113"></a>00113             <span class="keywordflow">return</span> num_chunks==1;
-<a name="l00114"></a>00114         }
-<a name="l00115"></a>00115         partition_type( <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
-<a name="l00116"></a>00116         partition_type( partition_type& pt, <a class="code" href="a00165.html">split</a> ) {
-<a name="l00117"></a>00117             num_chunks = pt.num_chunks /= 2u;
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119     };
-<a name="l00120"></a>00120 };
-<a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00115.html">00123</a> <span class="keyword">class </span><a class="code" href="a00115.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
-<a name="l00124"></a>00124 <span class="keyword">public</span>:
-<a name="l00125"></a>00125     <a class="code" href="a00115.html">affinity_partitioner</a>() {}
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">private</span>:
-<a name="l00128"></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>internal::start_for;
-<a name="l00129"></a>00129     <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>internal::start_reduce;
-<a name="l00130"></a>00130     <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>internal::start_reduce_with_affinity;
-<a name="l00131"></a>00131     <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>internal::start_scan;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="keyword">typedef</span> internal::affinity_partition_type partition_type;
-<a name="l00134"></a>00134     <span class="keyword">friend</span> <span class="keyword">class </span>internal::affinity_partition_type;
-<a name="l00135"></a>00135 };
-<a name="l00136"></a>00136 
-<a name="l00138"></a>00138 <span class="keyword">namespace </span>internal {
+<a name="l00048"></a>00048     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00049"></a>00049     <span class="keyword">class </span>final_sum: <span class="keyword">public</span> <a class="code" href="a00174.html">task</a> {
+<a name="l00050"></a>00050     <span class="keyword">public</span>:
+<a name="l00051"></a>00051         Body body;
+<a name="l00052"></a>00052     <span class="keyword">private</span>:
+<a name="l00053"></a>00053         <a class="code" href="a00121.html">aligned_space<Range,1></a> range;
+<a name="l00055"></a>00055         Body* stuff_last;
+<a name="l00056"></a>00056     <span class="keyword">public</span>:
+<a name="l00057"></a>00057         final_sum( Body& body_ ) :
+<a name="l00058"></a>00058             body(body_,<a class="code" href="a00173.html">split</a>())
+<a name="l00059"></a>00059         {
+<a name="l00060"></a>00060             poison_pointer(stuff_last);
+<a name="l00061"></a>00061         }
+<a name="l00062"></a>00062         ~final_sum() {
+<a name="l00063"></a>00063             range.begin()->~Range();
+<a name="l00064"></a>00064         }     
+<a name="l00065"></a>00065         <span class="keywordtype">void</span> finish_construction( <span class="keyword">const</span> Range& range_, Body* stuff_last_ ) {
+<a name="l00066"></a>00066             <span class="keyword">new</span>( range.begin() ) Range(range_);
+<a name="l00067"></a>00067             stuff_last = stuff_last_;
+<a name="l00068"></a>00068         }
+<a name="l00069"></a>00069     <span class="keyword">private</span>:
+<a name="l00070"></a>00070         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00071"></a>00071             body( *range.begin(), final_scan_tag() );
+<a name="l00072"></a>00072             <span class="keywordflow">if</span>( stuff_last )
+<a name="l00073"></a>00073                 stuff_last->assign(body);
+<a name="l00074"></a>00074             <span class="keywordflow">return</span> NULL;
+<a name="l00075"></a>00075         }
+<a name="l00076"></a>00076     };       
+<a name="l00077"></a>00077 
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00081"></a>00081     <span class="keyword">class </span>sum_node: <span class="keyword">public</span> task {
+<a name="l00082"></a>00082         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
+<a name="l00083"></a>00083     <span class="keyword">public</span>:
+<a name="l00084"></a>00084         final_sum_type *incoming; 
+<a name="l00085"></a>00085         final_sum_type *body;
+<a name="l00086"></a>00086         Body *stuff_last;
+<a name="l00087"></a>00087     <span class="keyword">private</span>:
+<a name="l00088"></a>00088         final_sum_type *left_sum;
+<a name="l00089"></a>00089         sum_node *left;
+<a name="l00090"></a>00090         sum_node *right;     
+<a name="l00091"></a>00091         <span class="keywordtype">bool</span> left_is_final;
+<a name="l00092"></a>00092         Range range;
+<a name="l00093"></a>00093         sum_node( <span class="keyword">const</span> Range range_, <span class="keywordtype">bool</span> left_is_final_ ) : 
+<a name="l00094"></a>00094             left_sum(NULL), 
+<a name="l00095"></a>00095             left(NULL), 
+<a name="l00096"></a>00096             right(NULL), 
+<a name="l00097"></a>00097             left_is_final(left_is_final_), 
+<a name="l00098"></a>00098             range(range_)
+<a name="l00099"></a>00099         {
+<a name="l00100"></a>00100             <span class="comment">// Poison fields that will be set by second pass.</span>
+<a name="l00101"></a>00101             poison_pointer(body);
+<a name="l00102"></a>00102             poison_pointer(incoming);
+<a name="l00103"></a>00103         }
+<a name="l00104"></a>00104         task* create_child( <span class="keyword">const</span> Range& range, final_sum_type& f, sum_node* n, final_sum_type* incoming, Body* stuff_last ) {
+<a name="l00105"></a>00105             <span class="keywordflow">if</span>( !n ) {
+<a name="l00106"></a>00106                 f.recycle_as_child_of( *<span class="keyword">this</span> );
+<a name="l00107"></a>00107                 f.finish_construction( range, stuff_last );
+<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &f;
+<a name="l00109"></a>00109             } <span class="keywordflow">else</span> {
+<a name="l00110"></a>00110                 n->body = &f;
+<a name="l00111"></a>00111                 n->incoming = incoming;
+<a name="l00112"></a>00112                 n->stuff_last = stuff_last;
+<a name="l00113"></a>00113                 <span class="keywordflow">return</span> n;
+<a name="l00114"></a>00114             }
+<a name="l00115"></a>00115         }
+<a name="l00116"></a>00116         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00117"></a>00117             <span class="keywordflow">if</span>( body ) {
+<a name="l00118"></a>00118                 <span class="keywordflow">if</span>( incoming )
+<a name="l00119"></a>00119                     left_sum->body.reverse_join( incoming->body );
+<a name="l00120"></a>00120                 recycle_as_continuation();
+<a name="l00121"></a>00121                 sum_node& c = *<span class="keyword">this</span>;
+<a name="l00122"></a>00122                 task* b = c.create_child(Range(range,split()),*left_sum,right,left_sum,stuff_last);
+<a name="l00123"></a>00123                 task* a = left_is_final ? NULL : c.create_child(range,*body,left,incoming,NULL);
+<a name="l00124"></a>00124                 set_ref_count( (a!=NULL)+(b!=NULL) );
+<a name="l00125"></a>00125                 body = NULL; 
+<a name="l00126"></a>00126                 <span class="keywordflow">if</span>( a ) spawn(*b);
+<a name="l00127"></a>00127                 <span class="keywordflow">else</span> a = b;
+<a name="l00128"></a>00128                 <span class="keywordflow">return</span> a;
+<a name="l00129"></a>00129             } <span class="keywordflow">else</span> {
+<a name="l00130"></a>00130                 <span class="keywordflow">return</span> NULL;
+<a name="l00131"></a>00131             }
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133         <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="l00134"></a>00134         <span class="keyword">friend</span> <span class="keyword">class </span>start_scan;
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136         <span class="keyword">template</span><<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_>
+<a name="l00137"></a>00137         <span class="keyword">friend</span> <span class="keyword">class </span>finish_scan;
+<a name="l00138"></a>00138     };
 <a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="keyword">class </span>affinity_partition_type: <span class="keyword">public</span> no_copy {
-<a name="l00142"></a>00142     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 16;
-<a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     internal::affinity_id* my_array;
-<a name="l00146"></a>00146     <a class="code" href="a00168.html">task_list</a> delay_list;
-<a name="l00147"></a>00147     <span class="keywordtype">unsigned</span> map_begin, map_end;
-<a name="l00148"></a>00148     size_t num_chunks;
-<a name="l00149"></a>00149 <span class="keyword">public</span>:
-<a name="l00150"></a>00150     affinity_partition_type( <a class="code" href="a00115.html">affinity_partitioner</a>& ap ) {
-<a name="l00151"></a>00151         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
-<a name="l00152"></a>00152         ap.resize(factor);
-<a name="l00153"></a>00153         my_array = ap.my_array;
-<a name="l00154"></a>00154         map_begin = 0;
-<a name="l00155"></a>00155         map_end = unsigned(ap.my_size);
-<a name="l00156"></a>00156         num_chunks = internal::get_initial_auto_partitioner_divisor();
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158     affinity_partition_type(affinity_partition_type& p, split) : my_array(p.my_array) {
-<a name="l00159"></a>00159         __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
-<a name="l00160"></a>00160         num_chunks = p.num_chunks /= 2;
-<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> e = p.map_end;
-<a name="l00162"></a>00162         <span class="keywordtype">unsigned</span> d = (e - p.map_begin)/2;
-<a name="l00163"></a>00163         <span class="keywordflow">if</span>( d>factor ) 
-<a name="l00164"></a>00164             d &= 0u-factor;
-<a name="l00165"></a>00165         map_end = e;
-<a name="l00166"></a>00166         map_begin = p.map_end = e-d;
-<a name="l00167"></a>00167     }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &t) {
-<a name="l00170"></a>00170         <span class="keywordflow">if</span>( num_chunks < VICTIM_CHUNKS && t.is_stolen_task() )
-<a name="l00171"></a>00171             num_chunks = VICTIM_CHUNKS;
-<a name="l00172"></a>00172         <span class="keywordflow">return</span> num_chunks == 1;
-<a name="l00173"></a>00173     }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="keywordtype">void</span> set_affinity( task &t ) {
-<a name="l00176"></a>00176         <span class="keywordflow">if</span>( map_begin<map_end )
-<a name="l00177"></a>00177             t.set_affinity( my_array[map_begin] );
-<a name="l00178"></a>00178     }
-<a name="l00179"></a>00179     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
-<a name="l00180"></a>00180         <span class="keywordflow">if</span>( map_begin<map_end ) 
-<a name="l00181"></a>00181             my_array[map_begin] = id;
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     task* continue_after_execute_range( task& t ) {
-<a name="l00184"></a>00184         task* first = NULL;
-<a name="l00185"></a>00185         <span class="keywordflow">if</span>( !delay_list.empty() ) {
-<a name="l00186"></a>00186             first = &delay_list.pop_front();
-<a name="l00187"></a>00187             <span class="keywordflow">while</span>( !delay_list.empty() ) {
-<a name="l00188"></a>00188                 t.spawn(*first);
-<a name="l00189"></a>00189                 first = &delay_list.pop_front();
-<a name="l00190"></a>00190             }
-<a name="l00191"></a>00191         }
-<a name="l00192"></a>00192         <span class="keywordflow">return</span> first;
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194     <span class="keywordtype">bool</span> decide_whether_to_delay() {
-<a name="l00195"></a>00195         <span class="comment">// The possible underflow caused by "-1u" is deliberate</span>
-<a name="l00196"></a>00196         <span class="keywordflow">return</span> (map_begin&(factor-1))==0 && map_end-map_begin-1u<factor;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span> delay, task& a, task& b ) {
-<a name="l00199"></a>00199         <span class="keywordflow">if</span>( delay )  
-<a name="l00200"></a>00200             delay_list.push_back(b);
-<a name="l00201"></a>00201         <span class="keywordflow">else</span> 
-<a name="l00202"></a>00202             a.spawn(b);
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     ~affinity_partition_type() {
-<a name="l00206"></a>00206         <span class="comment">// The delay_list can be non-empty if an exception is thrown.</span>
-<a name="l00207"></a>00207         <span class="keywordflow">while</span>( !delay_list.empty() ) {
-<a name="l00208"></a>00208             task& t = delay_list.pop_front();
-<a name="l00209"></a>00209             t.destroy(t);
-<a name="l00210"></a>00210         } 
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212 };
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 } <span class="comment">// namespace internal</span>
-<a name="l00216"></a>00216 <span class="comment"></span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 } <span class="comment">// namespace tbb</span>
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00143"></a>00143     <span class="keyword">class </span>finish_scan: <span class="keyword">public</span> task {
+<a name="l00144"></a>00144         <span class="keyword">typedef</span> sum_node<Range,Body> sum_node_type;
+<a name="l00145"></a>00145         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
+<a name="l00146"></a>00146         final_sum_type** <span class="keyword">const</span> sum;
+<a name="l00147"></a>00147         sum_node_type*& return_slot;
+<a name="l00148"></a>00148     <span class="keyword">public</span>:
+<a name="l00149"></a>00149         final_sum_type* right_zombie;
+<a name="l00150"></a>00150         sum_node_type& result;
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00153"></a>00153             __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
+<a name="l00154"></a>00154             <span class="keywordflow">if</span>( result.left )
+<a name="l00155"></a>00155                 result.left_is_final = <span class="keyword">false</span>;
+<a name="l00156"></a>00156             <span class="keywordflow">if</span>( right_zombie && sum ) 
+<a name="l00157"></a>00157                 ((*sum)->body).reverse_join(result.left_sum->body);
+<a name="l00158"></a>00158             __TBB_ASSERT( !return_slot, NULL );
+<a name="l00159"></a>00159             <span class="keywordflow">if</span>( right_zombie || result.right ) {
+<a name="l00160"></a>00160                 return_slot = &result;
+<a name="l00161"></a>00161             } <span class="keywordflow">else</span> {
+<a name="l00162"></a>00162                 destroy( result );
+<a name="l00163"></a>00163             }
+<a name="l00164"></a>00164             <span class="keywordflow">if</span>( right_zombie && !sum && !result.right ) destroy(*right_zombie);
+<a name="l00165"></a>00165             <span class="keywordflow">return</span> NULL;
+<a name="l00166"></a>00166         }
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168         finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) : 
+<a name="l00169"></a>00169             sum(sum_),
+<a name="l00170"></a>00170             return_slot(return_slot_), 
+<a name="l00171"></a>00171             right_zombie(NULL),
+<a name="l00172"></a>00172             result(result_)
+<a name="l00173"></a>00173         {
+<a name="l00174"></a>00174             __TBB_ASSERT( !return_slot, NULL );
+<a name="l00175"></a>00175         }
+<a name="l00176"></a>00176     };
+<a name="l00177"></a>00177 
+<a name="l00179"></a>00179 
+<a name="l00180"></a>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>00181     <span class="keyword">class </span>start_scan: <span class="keyword">public</span> task {
+<a name="l00182"></a>00182         <span class="keyword">typedef</span> sum_node<Range,Body> sum_node_type;
+<a name="l00183"></a>00183         <span class="keyword">typedef</span> final_sum<Range,Body> final_sum_type;
+<a name="l00184"></a>00184         final_sum_type* body;
+<a name="l00186"></a>00186         final_sum_type** sum; 
+<a name="l00187"></a>00187         sum_node_type** return_slot;
+<a name="l00189"></a>00189         sum_node_type* parent_sum;
+<a name="l00190"></a>00190         <span class="keywordtype">bool</span> is_final;
+<a name="l00191"></a>00191         <span class="keywordtype">bool</span> is_right_child;
+<a name="l00192"></a>00192         Range range;
+<a name="l00193"></a>00193         <span class="keyword">typename</span> Partitioner::partition_type partition;
+<a name="l00194"></a>00194         <span class="comment">/*override*/</span> task* execute();
+<a name="l00195"></a>00195     <span class="keyword">public</span>:
+<a name="l00196"></a>00196         start_scan( sum_node_type*& return_slot_, start_scan& parent, sum_node_type* parent_sum_ ) :
+<a name="l00197"></a>00197             body(parent.body),
+<a name="l00198"></a>00198             sum(parent.sum),
+<a name="l00199"></a>00199             return_slot(&return_slot_),
+<a name="l00200"></a>00200             parent_sum(parent_sum_),
+<a name="l00201"></a>00201             is_final(parent.is_final),
+<a name="l00202"></a>00202             is_right_child(false),
+<a name="l00203"></a>00203             range(parent.range,split()),
+<a name="l00204"></a>00204             partition(parent.partition,split())
+<a name="l00205"></a>00205         {
+<a name="l00206"></a>00206             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00207"></a>00207         }
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209         start_scan( sum_node_type*& return_slot_, <span class="keyword">const</span> Range& range_, final_sum_type& body_, <span class="keyword">const</span> Partitioner& partitioner_) :
+<a name="l00210"></a>00210             body(&body_),
+<a name="l00211"></a>00211             sum(NULL),
+<a name="l00212"></a>00212             return_slot(&return_slot_),
+<a name="l00213"></a>00213             parent_sum(NULL),
+<a name="l00214"></a>00214             is_final(true),
+<a name="l00215"></a>00215             is_right_child(false),
+<a name="l00216"></a>00216             range(range_),
+<a name="l00217"></a>00217             partition(partitioner_)
+<a name="l00218"></a>00218         {
+<a name="l00219"></a>00219             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00220"></a>00220         }
+<a name="l00221"></a>00221 
+<a name="l00222"></a>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 ) {
+<a name="l00223"></a>00223             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00224"></a>00224                 <span class="keyword">typedef</span> internal::start_scan<Range,Body,Partitioner> start_pass1_type;
+<a name="l00225"></a>00225                 internal::sum_node<Range,Body>* root = NULL;
+<a name="l00226"></a>00226                 <span class="keyword">typedef</span> internal::final_sum<Range,Body> final_sum_type;
+<a name="l00227"></a>00227                 final_sum_type* temp_body = <span class="keyword">new</span>(<a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) final_sum_type( body );
+<a name="l00228"></a>00228                 start_pass1_type& pass1 = *<span class="keyword">new</span>(<a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_pass1_type(
+<a name="l00229"></a>00229                     <span class="comment">/*return_slot=*/</span>root,
+<a name="l00230"></a>00230                     range,
+<a name="l00231"></a>00231                     *temp_body,
+<a name="l00232"></a>00232                     partitioner );
+<a name="l00233"></a>00233                 <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( pass1 );
+<a name="l00234"></a>00234                 <span class="keywordflow">if</span>( root ) {
+<a name="l00235"></a>00235                     root->body = temp_body;
+<a name="l00236"></a>00236                     root->incoming = NULL;
+<a name="l00237"></a>00237                     root->stuff_last = &body;
+<a name="l00238"></a>00238                     <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *root );
+<a name="l00239"></a>00239                 } <span class="keywordflow">else</span> {
+<a name="l00240"></a>00240                     body.assign(temp_body->body);
+<a name="l00241"></a>00241                     temp_body->finish_construction( range, NULL );
+<a name="l00242"></a>00242                     temp_body->destroy(*temp_body);
+<a name="l00243"></a>00243                 }
+<a name="l00244"></a>00244             }
+<a name="l00245"></a>00245         }
+<a name="l00246"></a>00246     };
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248     <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="l00249"></a>00249     task* start_scan<Range,Body,Partitioner>::execute() {
+<a name="l00250"></a>00250         <span class="keyword">typedef</span> internal::finish_scan<Range,Body> finish_pass1_type;
+<a name="l00251"></a>00251         finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;
+<a name="l00252"></a>00252         <span class="comment">// Inspecting p->result.left_sum would ordinarily be a race condition.</span>
+<a name="l00253"></a>00253         <span class="comment">// But we inspect it only if we are not a stolen task, in which case we</span>
+<a name="l00254"></a>00254         <span class="comment">// know that task assigning to p->result.left_sum has completed.</span>
+<a name="l00255"></a>00255         <span class="keywordtype">bool</span> treat_as_stolen = is_right_child && (is_stolen_task() || body!=p->result.left_sum);
+<a name="l00256"></a>00256         <span class="keywordflow">if</span>( treat_as_stolen ) {
+<a name="l00257"></a>00257             <span class="comment">// Invocation is for right child that has been really stolen or needs to be virtually stolen</span>
+<a name="l00258"></a>00258             p->right_zombie = body = <span class="keyword">new</span>( allocate_root() ) final_sum_type(body->body);
+<a name="l00259"></a>00259             is_final = <span class="keyword">false</span>;
+<a name="l00260"></a>00260         }
+<a name="l00261"></a>00261         task* next_task = NULL;
+<a name="l00262"></a>00262         <span class="keywordflow">if</span>( (is_right_child && !treat_as_stolen) || !range.is_divisible() || partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00263"></a>00263             <span class="keywordflow">if</span>( is_final )
+<a name="l00264"></a>00264                 (body->body)( range, final_scan_tag() );
+<a name="l00265"></a>00265             <span class="keywordflow">else</span> <span class="keywordflow">if</span>( sum )
+<a name="l00266"></a>00266                 (body->body)( range, pre_scan_tag() );
+<a name="l00267"></a>00267             <span class="keywordflow">if</span>( sum ) 
+<a name="l00268"></a>00268                 *sum = body;
+<a name="l00269"></a>00269             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00270"></a>00270         } <span class="keywordflow">else</span> {
+<a name="l00271"></a>00271             sum_node_type* result;
+<a name="l00272"></a>00272             <span class="keywordflow">if</span>( parent_sum ) 
+<a name="l00273"></a>00273                 result = <span class="keyword">new</span>(allocate_additional_child_of(*parent_sum)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+<a name="l00274"></a>00274             <span class="keywordflow">else</span>
+<a name="l00275"></a>00275                 result = <span class="keyword">new</span>(<a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+<a name="l00276"></a>00276             finish_pass1_type& c = *<span class="keyword">new</span>( allocate_continuation()) finish_pass1_type(*return_slot,sum,*result);
+<a name="l00277"></a>00277             <span class="comment">// Split off right child</span>
+<a name="l00278"></a>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 );
+<a name="l00279"></a>00279             b.is_right_child = <span class="keyword">true</span>;    
+<a name="l00280"></a>00280             <span class="comment">// Left child is recycling of *this.  Must recycle this before spawning b, </span>
+<a name="l00281"></a>00281             <span class="comment">// otherwise b might complete and decrement c.ref_count() to zero, which</span>
+<a name="l00282"></a>00282             <span class="comment">// would cause c.execute() to run prematurely.</span>
+<a name="l00283"></a>00283             recycle_as_child_of(c);
+<a name="l00284"></a>00284             c.set_ref_count(2);
+<a name="l00285"></a>00285             c.spawn(b);
+<a name="l00286"></a>00286             sum = &result->left_sum;
+<a name="l00287"></a>00287             return_slot = &result->left;
+<a name="l00288"></a>00288             is_right_child = <span class="keyword">false</span>;
+<a name="l00289"></a>00289             next_task = <span class="keyword">this</span>;
+<a name="l00290"></a>00290             parent_sum = result; 
+<a name="l00291"></a>00291             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00292"></a>00292         }
+<a name="l00293"></a>00293         <span class="keywordflow">return</span> next_task;
+<a name="l00294"></a>00294     } 
+<a name="l00295"></a>00295 } <span class="comment">// namespace internal</span>
+<a name="l00297"></a>00297 <span class="comment"></span>
+<a name="l00298"></a>00298 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00299"></a>00299 
+<a name="l00317"></a>00317 
+<a name="l00319"></a>00319 
+<a name="l00320"></a>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="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00322"></a>00322     internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324 
+<a name="l00326"></a>00326 
+<a name="l00327"></a>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="a00241.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& partitioner ) {
+<a name="l00329"></a>00329     internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);
+<a name="l00330"></a>00330 }
+<a name="l00331"></a>00331 
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00335"></a><a class="code" href="a00241.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& partitioner ) {
+<a name="l00336"></a>00336     internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);
+<a name="l00337"></a>00337 }
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340 } <span class="comment">// namespace tbb</span>
+<a name="l00341"></a>00341 
+<a name="l00342"></a>00342 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_scan_H */</span>
+<a name="l00343"></a>00343 
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00347.html b/doc/html/a00347.html
index 48b1ebf..52a9ad0 100644
--- a/doc/html/a00347.html
+++ b/doc/html/a00347.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>
+<title>parallel_sort.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>pipeline.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,193 +39,181 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_pipeline_H </span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_H </span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <cstddef></span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_for.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <algorithm></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <iterator></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <functional></span>
 <a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">class </span>pipeline;
-<a name="l00031"></a>00031 <span class="keyword">class </span>filter;
-<a name="l00032"></a>00032 
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
-<a name="l00040"></a>00040 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
-<a name="l00041"></a>00041 <span class="keyword">class </span>stage_task;
-<a name="l00042"></a>00042 <span class="keyword">class </span>input_buffer;
-<a name="l00043"></a>00043 <span class="keyword">class </span>pipeline_root_task;
-<a name="l00044"></a>00044 <span class="keyword">class </span>pipeline_cleaner;
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
-<a name="l00048"></a>00048 <span class="comment"></span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a><a class="code" href="a00139.html">00051</a> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>: internal::no_copy {
-<a name="l00052"></a>00052 <span class="keyword">private</span>:
-<a name="l00054"></a>00054     <span class="keyword">static</span> <a class="code" href="a00139.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(internal::intptr(-1));}
-<a name="l00055"></a>00055     
-<a name="l00057"></a>00057     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_serial = 0x1; 
-<a name="l00058"></a>00058 
-<a name="l00060"></a>00060 
-<a name="l00062"></a>00062     <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;  
-<a name="l00063"></a>00063 
-<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_bound = 0x1<<5;  
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067     <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(5);
-<a name="l00068"></a>00068     <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>
-<a name="l00069"></a>00069 <span class="keyword">public</span>:
-<a name="l00070"></a><a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">00070</a>     <span class="keyword">enum</span> <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> {
-<a name="l00072"></a>00072         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order, 
-<a name="l00074"></a>00074         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial,
-<a name="l00076"></a>00076         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order,
-<a name="l00078"></a>00078         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order
-<a name="l00079"></a>00079     };
-<a name="l00080"></a>00080 <span class="keyword">protected</span>:
-<a name="l00081"></a>00081     <a class="code" href="a00139.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
-<a name="l00082"></a>00082         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00083"></a>00083         my_input_buffer(NULL),
-<a name="l00084"></a>00084         my_filter_mode(static_cast<unsigned char>(is_serial_ ? <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> : <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a>)),
-<a name="l00085"></a>00085         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00086"></a>00086         my_pipeline(NULL),
-<a name="l00087"></a>00087         next_segment(NULL)
-<a name="l00088"></a>00088     {}
-<a name="l00089"></a>00089     
-<a name="l00090"></a>00090     filter( <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode ) :
-<a name="l00091"></a>00091         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00092"></a>00092         my_input_buffer(NULL),
-<a name="l00093"></a>00093         my_filter_mode(static_cast<unsigned char>(filter_mode)),
-<a name="l00094"></a>00094         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00095"></a>00095         my_pipeline(NULL),
-<a name="l00096"></a>00096         next_segment(NULL)
-<a name="l00097"></a>00097     {}
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">public</span>:
-<a name="l00101"></a><a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">00101</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
-<a name="l00102"></a>00102         <span class="keywordflow">return</span> bool( my_filter_mode & filter_is_serial );
-<a name="l00103"></a>00103     }  
-<a name="l00104"></a>00104     
-<a name="l00106"></a><a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
-<a name="l00107"></a>00107         <span class="keywordflow">return</span> (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
-<a name="l00108"></a>00108     }
-<a name="l00109"></a>00109 
-<a name="l00111"></a><a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">00111</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
-<a name="l00112"></a>00112         <span class="keywordflow">return</span> ( my_filter_mode & filter_is_bound )==filter_is_bound;
-<a name="l00113"></a>00113     }
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036 
+<a name="l00039"></a>00039 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00040"></a>00040 <span class="keyword">class </span>quick_sort_range: <span class="keyword">private</span> no_assign {
+<a name="l00041"></a>00041 
+<a name="l00042"></a>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>{
+<a name="l00043"></a>00043         <span class="keywordflow">return</span> comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
+<a name="l00044"></a>00044                                         : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
+<a name="l00045"></a>00045     }
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047     <span class="keyword">inline</span> size_t pseudo_median_of_nine( <span class="keyword">const</span> RandomAccessIterator &array, <span class="keyword">const</span> quick_sort_range &range )<span class="keyword"> const </span>{
+<a name="l00048"></a>00048         size_t offset = range.size/8u;
+<a name="l00049"></a>00049         <span class="keywordflow">return</span> median_of_three(array, 
+<a name="l00050"></a>00050                                median_of_three(array, 0, offset, offset*2),
+<a name="l00051"></a>00051                                median_of_three(array, offset*3, offset*4, offset*5),
+<a name="l00052"></a>00052                                median_of_three(array, offset*6, offset*7, range.size - 1) );
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     }
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="keyword">public</span>:
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058     <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
+<a name="l00059"></a>00059     <span class="keyword">const</span> Compare &comp;
+<a name="l00060"></a>00060     RandomAccessIterator begin;
+<a name="l00061"></a>00061     size_t size;
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063     quick_sort_range( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &comp_ ) :
+<a name="l00064"></a>00064         comp(comp_), begin(begin_), size(size_) {}
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
+<a name="l00067"></a>00067     <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size>=grainsize;}
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
+<a name="l00070"></a>00070         RandomAccessIterator array = range.begin;
+<a name="l00071"></a>00071         RandomAccessIterator key0 = range.begin; 
+<a name="l00072"></a>00072         size_t m = pseudo_median_of_nine(array, range);
+<a name="l00073"></a>00073         <span class="keywordflow">if</span> (m) std::swap ( array[0], array[m] );
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075         size_t i=0;
+<a name="l00076"></a>00076         size_t j=range.size;
+<a name="l00077"></a>00077         <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
+<a name="l00078"></a>00078         <span class="keywordflow">for</span>(;;) {
+<a name="l00079"></a>00079             __TBB_ASSERT( i<j, NULL );
+<a name="l00080"></a>00080             <span class="comment">// Loop must terminate since array[l]==*key0.</span>
+<a name="l00081"></a>00081             <span class="keywordflow">do</span> {
+<a name="l00082"></a>00082                 --j;
+<a name="l00083"></a>00083                 __TBB_ASSERT( i<=j, <span class="stringliteral">"bad ordering relation?"</span> );
+<a name="l00084"></a>00084             } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
+<a name="l00085"></a>00085             <span class="keywordflow">do</span> {
+<a name="l00086"></a>00086                 __TBB_ASSERT( i<=j, NULL );
+<a name="l00087"></a>00087                 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+<a name="l00088"></a>00088                 ++i;
+<a name="l00089"></a>00089             } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
+<a name="l00090"></a>00090             <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+<a name="l00091"></a>00091             std::swap( array[i], array[j] );
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093 partition:
+<a name="l00094"></a>00094         <span class="comment">// Put the partition key were it belongs</span>
+<a name="l00095"></a>00095         std::swap( array[j], *key0 );
+<a name="l00096"></a>00096         <span class="comment">// array[l..j) is less or equal to key.</span>
+<a name="l00097"></a>00097         <span class="comment">// array(j..r) is greater or equal to key.</span>
+<a name="l00098"></a>00098         <span class="comment">// array[j] is equal to key</span>
+<a name="l00099"></a>00099         i=j+1;
+<a name="l00100"></a>00100         begin = array+i;
+<a name="l00101"></a>00101         size = range.size-i;
+<a name="l00102"></a>00102         range.size = j;
+<a name="l00103"></a>00103     }
+<a name="l00104"></a>00104 };
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00109"></a>00109 <span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
+<a name="l00110"></a>00110     <span class="keyword">const</span> Compare &comp;
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="keyword">public</span>:
+<a name="l00113"></a>00113     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
 <a name="l00114"></a>00114 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
+<a name="l00115"></a>00115     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
+<a name="l00116"></a>00116         task &my_task = <a class="code" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
+<a name="l00117"></a>00117         RandomAccessIterator my_end = range.end();
 <a name="l00118"></a>00118 
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00125"></a>00125 <span class="preprocessor"></span>
-<a name="l00127"></a><a class="code" href="a00139.html#56275eb889c77c4807967133e21401bd">00127</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
-<a name="l00128"></a>00128 <span class="preprocessor">#endif</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>
-<a name="l00130"></a>00130 <span class="keyword">private</span>:
-<a name="l00132"></a>00132     <a class="code" href="a00139.html">filter</a>* next_filter_in_pipeline;
-<a name="l00133"></a>00133 
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     internal::input_buffer* my_input_buffer;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00139"></a>00139     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00140"></a>00140     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a>;
-<a name="l00141"></a>00141     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
+<a name="l00119"></a>00119         <span class="keywordtype">int</span> i = 0;
+<a name="l00120"></a>00120         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+<a name="l00121"></a>00121             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
+<a name="l00122"></a>00122           
+<a name="l00123"></a>00123             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
+<a name="l00124"></a>00124             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
+<a name="l00125"></a>00125                 my_task.cancel_group_execution();
+<a name="l00126"></a>00126                 <span class="keywordflow">break</span>;
+<a name="l00127"></a>00127             }
+<a name="l00128"></a>00128         }
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 };
+<a name="l00132"></a>00132 
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00136"></a>00136 <span class="keyword">struct </span>quick_sort_body {
+<a name="l00137"></a>00137     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
+<a name="l00138"></a>00138         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
+<a name="l00139"></a>00139         std::sort( range.begin, range.begin + range.size, range.comp );
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 };
 <a name="l00142"></a>00142 
-<a name="l00144"></a>00144     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
-<a name="l00145"></a>00145 
-<a name="l00147"></a>00147     <a class="code" href="a00139.html">filter</a>* prev_filter_in_pipeline;
-<a name="l00148"></a>00148 
-<a name="l00150"></a>00150     <a class="code" href="a00150.html">pipeline</a>* my_pipeline;
-<a name="l00151"></a>00151 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <a class="code" href="a00139.html">filter</a>* next_segment;
-<a name="l00155"></a>00155 };
-<a name="l00156"></a>00156 
-<a name="l00158"></a>00158 
-<a name="l00159"></a><a class="code" href="a00175.html">00159</a> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00139.html">filter</a> {
-<a name="l00160"></a>00160 <span class="keyword">public</span>:
-<a name="l00161"></a>00161     <span class="keyword">enum</span> result_type {
-<a name="l00162"></a>00162         <span class="comment">// item was processed</span>
-<a name="l00163"></a>00163         success,
-<a name="l00164"></a>00164         <span class="comment">// item is currently not available</span>
-<a name="l00165"></a>00165         item_not_available,
-<a name="l00166"></a>00166         <span class="comment">// there are no more items to process</span>
-<a name="l00167"></a>00167         end_of_stream
-<a name="l00168"></a>00168     };
-<a name="l00169"></a>00169 <span class="keyword">protected</span>:
-<a name="l00170"></a>00170     <a class="code" href="a00175.html">thread_bound_filter</a>(<a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode): 
-<a name="l00171"></a>00171          <a class="code" href="a00139.html">filter</a>(static_cast<mode>(filter_mode | filter::filter_is_bound))
-<a name="l00172"></a>00172     {}
-<a name="l00173"></a>00173 <span class="keyword">public</span>:
-<a name="l00175"></a>00175 
-<a name="l00180"></a>00180     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
-<a name="l00181"></a>00181 
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00146"></a>00146 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
+<a name="l00147"></a>00147     task_group_context my_context;
+<a name="l00148"></a>00148     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
+<a name="l00151"></a>00151     RandomAccessIterator k;
+<a name="l00152"></a>00152     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
+<a name="l00153"></a>00153         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
+<a name="l00154"></a>00154             <span class="keywordflow">goto</span> do_parallel_quick_sort;
+<a name="l00155"></a>00155         }
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
+<a name="l00159"></a>00159                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+<a name="l00160"></a>00160                   auto_partitioner(),
+<a name="l00161"></a>00161                   my_context);
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
+<a name="l00164"></a>00164 do_parallel_quick_sort:
+<a name="l00165"></a>00165         <a class="code" href="a00241.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+<a name="l00166"></a>00166                       quick_sort_body<RandomAccessIterator,Compare>(),
+<a name="l00167"></a>00167                       auto_partitioner() );
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
+<a name="l00172"></a>00172 <span class="comment"></span>
 <a name="l00183"></a>00183 
-<a name="l00187"></a>00187     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="keyword">private</span>:
-<a name="l00191"></a>00191     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
-<a name="l00192"></a>00192 };
-<a name="l00193"></a>00193 
-<a name="l00195"></a>00195 
-<a name="l00196"></a><a class="code" href="a00150.html">00196</a> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a> {
-<a name="l00197"></a>00197 <span class="keyword">public</span>:
-<a name="l00199"></a>00199     __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
-<a name="l00200"></a>00200 
-<a name="l00203"></a>00203     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
-<a name="l00204"></a>00204 
-<a name="l00206"></a>00206     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00139.html">filter</a>& filter_ );
-<a name="l00207"></a>00207 
-<a name="l00209"></a>00209     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00213"></a>00213 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00215"></a>00215 <span class="preprocessor"></span>
-<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="keyword">private</span>:
-<a name="l00220"></a>00220     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00221"></a>00221     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00222"></a>00222     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>;
-<a name="l00223"></a>00223     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
-<a name="l00224"></a>00224     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227     <a class="code" href="a00139.html">filter</a>* filter_list;
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230     <a class="code" href="a00139.html">filter</a>* filter_end;
-<a name="l00231"></a>00231 
-<a name="l00233"></a>00233     <a class="code" href="a00166.html">task</a>* end_counter;
-<a name="l00234"></a>00234 
-<a name="l00236"></a>00236     <a class="code" href="a00117.html">atomic<internal::Token></a> input_tokens;
-<a name="l00237"></a>00237 
-<a name="l00239"></a>00239     <a class="code" href="a00117.html">atomic<internal::Token></a> token_counter;
-<a name="l00240"></a>00240 
-<a name="l00242"></a>00242     <span class="keywordtype">bool</span> end_of_input;
-<a name="l00243"></a>00243 
-<a name="l00245"></a>00245     <span class="keywordtype">bool</span> has_thread_bound_filters;
-<a name="l00246"></a>00246 
-<a name="l00248"></a>00248     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00139.html">filter</a>& filter_ );
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00166.html">task</a>& <span class="keyword">self</span> );
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00255"></a>00255 <span class="preprocessor">    void clear_filters();</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00257"></a>00257 <span class="preprocessor"></span>};
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 } <span class="comment">// tbb</span>
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
+<a name="l00185"></a>00185 
+<a name="l00188"></a>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="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
+<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
+<a name="l00191"></a>00191     <span class="keywordflow">if</span>( end > begin ) {
+<a name="l00192"></a>00192         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
+<a name="l00193"></a>00193             std::sort(begin, end, comp);
+<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
+<a name="l00195"></a>00195             internal::parallel_quick_sort(begin, end, comp);
+<a name="l00196"></a>00196         }
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
+<a name="l00203"></a><a class="code" href="a00241.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
+<a name="l00204"></a>00204     <a class="code" href="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
+<a name="l00205"></a>00205 }
+<a name="l00206"></a>00206 
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00210"></a><a class="code" href="a00241.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
+<a name="l00211"></a>00211     <a class="code" href="a00241.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
+<a name="l00212"></a>00212 }   
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00350.html b/doc/html/a00350.html
deleted file mode 100644
index 20b0b3f..0000000
--- a/doc/html/a00350.html
+++ /dev/null
@@ -1,247 +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>recursive_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>recursive_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_recursive_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_recursive_mutex_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <windows.h></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
-<a name="l00029"></a>00029 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
-<a name="l00030"></a>00030 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <pthread.h></span>
-<a name="l00036"></a>00036 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
-<a name="l00037"></a>00037 <span class="comment">// Use this internal TBB function to throw an exception</span>
-<a name="l00038"></a>00038   <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
-<a name="l00039"></a>00039 } } <span class="comment">//namespaces</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <new></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="keyword">namespace </span>tbb {
-<a name="l00050"></a>00050 
-<a name="l00052"></a><a class="code" href="a00156.html">00052</a> <span class="keyword">class </span><a class="code" href="a00156.html">recursive_mutex</a> {
-<a name="l00053"></a>00053 <span class="keyword">public</span>:
-<a name="l00055"></a><a class="code" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00055</a>     <a class="code" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
-<a name="l00056"></a>00056 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span>        internal_construct();
-<a name="l00058"></a>00058 <span class="preprocessor">#else</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00061"></a>00061 <span class="preprocessor">  #else</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
-<a name="l00063"></a>00063         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &mtx_attr );
-<a name="l00064"></a>00064         <span class="keywordflow">if</span>( error_code )
-<a name="l00065"></a>00065             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutexattr_init failed"</span>);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067         pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
-<a name="l00068"></a>00068         error_code = pthread_mutex_init( &impl, &mtx_attr );
-<a name="l00069"></a>00069         <span class="keywordflow">if</span>( error_code )
-<a name="l00070"></a>00070             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072         pthread_mutexattr_destroy( &mtx_attr );
-<a name="l00073"></a>00073 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00075"></a>00075     };
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     ~<a class="code" href="a00156.html">recursive_mutex</a>() {
-<a name="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00083"></a>00083 <span class="preprocessor">  #else</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00087"></a>00087 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00088"></a>00088     };
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090     <span class="keyword">class </span>scoped_lock;
-<a name="l00091"></a>00091     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00092"></a>00092 
-<a name="l00094"></a>00094 
-<a name="l00096"></a><a class="code" href="a00157.html">00096</a>     <span class="keyword">class </span><a class="code" href="a00157.html">scoped_lock</a>: internal::no_copy {
-<a name="l00097"></a>00097     <span class="keyword">public</span>:
-<a name="l00099"></a><a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">00099</a>         <a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00100"></a>00100 
-<a name="l00102"></a><a class="code" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">00102</a>         <a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00156.html">recursive_mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00103"></a>00103 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span>            my_mutex = &mutex; 
-<a name="l00105"></a>00105 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00106"></a>00106             <a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
-<a name="l00107"></a>00107         }
-<a name="l00108"></a>00108 
-<a name="l00110"></a><a class="code" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00110</a>         <a class="code" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
-<a name="l00111"></a>00111             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00112"></a>00112                 <a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
-<a name="l00113"></a>00113         }
-<a name="l00114"></a>00114 
-<a name="l00116"></a><a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">00116</a>         <span class="keywordtype">void</span> <a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00156.html">recursive_mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00117"></a>00117 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>            internal_acquire( mutex );
-<a name="l00119"></a>00119 <span class="preprocessor">#else</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>            my_mutex = &mutex;
-<a name="l00121"></a>00121             mutex.<a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
-<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124 
-<a name="l00126"></a><a class="code" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">00126</a>         <span class="keywordtype">bool</span> <a class="code" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00156.html">recursive_mutex</a>& <a class="code" href="a00142.html">mutex</a> ) {
-<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
-<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
-<a name="l00131"></a>00131             <span class="keywordflow">if</span>( result )
-<a name="l00132"></a>00132                 my_mutex = &mutex;
-<a name="l00133"></a>00133             <span class="keywordflow">return</span> result;
-<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00135"></a>00135         }
-<a name="l00136"></a>00136 
-<a name="l00138"></a><a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">00138</a>         <span class="keywordtype">void</span> <a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
-<a name="l00139"></a>00139 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span>            internal_release();
-<a name="l00141"></a>00141 <span class="preprocessor">#else</span>
-<a name="l00142"></a>00142 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
-<a name="l00143"></a>00143             my_mutex = NULL;
-<a name="l00144"></a>00144 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00145"></a>00145         }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="keyword">private</span>:
-<a name="l00149"></a>00149         <a class="code" href="a00156.html">recursive_mutex</a>* my_mutex;
-<a name="l00150"></a>00150 
-<a name="l00152"></a>00152         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00156.html">recursive_mutex</a>& m );
-<a name="l00153"></a>00153 
-<a name="l00155"></a>00155         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00156.html">recursive_mutex</a>& m );
-<a name="l00156"></a>00156 
-<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00156.html">recursive_mutex</a>;
-<a name="l00161"></a>00161     };
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="comment">// Mutex traits</span>
-<a name="l00164"></a>00164     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
-<a name="l00165"></a>00165     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
-<a name="l00166"></a>00166     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     <span class="comment">// C++0x compatibility interface</span>
-<a name="l00169"></a>00169     
-<a name="l00171"></a><a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">00171</a>     <span class="keywordtype">void</span> <a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>() {
-<a name="l00172"></a>00172 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00174"></a>00174         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00157.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00175"></a>00175 <span class="preprocessor">#else</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00178"></a>00178 <span class="preprocessor">  #else</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00180"></a>00180 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00181"></a>00181 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 
-<a name="l00186"></a><a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">00186</a>     <span class="keywordtype">bool</span> <a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
-<a name="l00187"></a>00187 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00189"></a>00189         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00157.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
-<a name="l00190"></a>00190 <span class="preprocessor">#else        </span>
-<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00193"></a>00193 <span class="preprocessor">  #else</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00195"></a>00195 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 
-<a name="l00200"></a><a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">00200</a>     <span class="keywordtype">void</span> <a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
-<a name="l00201"></a>00201 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00203"></a>00203         <a class="code" href="a00157.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00204"></a>00204         s.<a class="code" href="a00157.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00205"></a>00205         s.<a class="code" href="a00157.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
-<a name="l00206"></a>00206 <span class="preprocessor">#else</span>
-<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00209"></a>00209 <span class="preprocessor">  #else</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00211"></a>00211 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00212"></a>00212 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="keyword">private</span>:
-<a name="l00216"></a>00216 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
-<a name="l00218"></a>00218     <span class="keyword">enum</span> state_t {
-<a name="l00219"></a>00219         INITIALIZED=0x1234,
-<a name="l00220"></a>00220         DESTROYED=0x789A,
-<a name="l00221"></a>00221     } state;
-<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00224"></a>00224 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00231"></a>00231 };
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 } <span class="comment">// namespace tbb </span>
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_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/a00351.html b/doc/html/a00351.html
index ccc4fc9..1224a39 100644
--- a/doc/html/a00351.html
+++ b/doc/html/a00351.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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>parallel_while.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>scalable_allocator.h</h1><a href="a00210.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>parallel_while.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,155 +39,152 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_scalable_allocator_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_scalable_allocator_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_while</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_while</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* Need ptrdiff_t and size_t from here. */</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include <new></span>
 <a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
-<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#if _MSC_VER >= 1400</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
-<a name="l00045"></a>00045 
-<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00049"></a>00049 
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
-<a name="l00053"></a>00053 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
-<a name="l00057"></a>00057 
-<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
-<a name="l00061"></a>00061 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
-<a name="l00065"></a>00065 
-<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
-<a name="l00069"></a>00069 
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00073"></a>00073 
-<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
-<a name="l00082"></a>00082 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>
-<a name="l00086"></a>00086 <span class="preprocessor">#include <new></span>      <span class="comment">/* To use new with the placement argument */</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
-<a name="l00089"></a>00089 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
-<a name="l00092"></a>00092 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="keyword">namespace </span>tbb {
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00102"></a>00102 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>
-<a name="l00107"></a>00107 
-<a name="l00110"></a>00110 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00111"></a><a class="code" href="a00158.html">00111</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a> {
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
-<a name="l00114"></a>00114     <span class="keyword">typedef</span> value_type* pointer;
-<a name="l00115"></a>00115     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00116"></a>00116     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<a name="l00118"></a>00118     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00119"></a>00119     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00121"></a>00121         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator<U></a> other;
-<a name="l00122"></a>00122     };
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00030"></a>00030 <span class="keyword">class </span>parallel_while;
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035     <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body> <span class="keyword">class </span>while_task;
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00040"></a>00040     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00041"></a>00041     <span class="keyword">class </span>while_iteration_task: <span class="keyword">public</span> task {
+<a name="l00042"></a>00042         <span class="keyword">const</span> Body& my_body;
+<a name="l00043"></a>00043         <span class="keyword">typename</span> Body::argument_type my_value;
+<a name="l00044"></a>00044         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00045"></a>00045             my_body(my_value); 
+<a name="l00046"></a>00046             <span class="keywordflow">return</span> NULL;
+<a name="l00047"></a>00047         }
+<a name="l00048"></a>00048         while_iteration_task( <span class="keyword">const</span> <span class="keyword">typename</span> Body::argument_type& value, <span class="keyword">const</span> Body& body ) : 
+<a name="l00049"></a>00049             my_body(body), my_value(value)
+<a name="l00050"></a>00050         {}
+<a name="l00051"></a>00051         <span class="keyword">template</span><<span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span>while_group_task;
+<a name="l00052"></a>00052         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00157.html">tbb::parallel_while</a><Body>;
+<a name="l00053"></a>00053     };
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056 
+<a name="l00058"></a>00058     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00059"></a>00059     <span class="keyword">class </span>while_group_task: <span class="keyword">public</span> task {
+<a name="l00060"></a>00060         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00061"></a>00061         <span class="keyword">const</span> Body& my_body;
+<a name="l00062"></a>00062         size_t size;
+<a name="l00063"></a>00063         <span class="keyword">typename</span> Body::argument_type my_arg[max_arg_size];
+<a name="l00064"></a>00064         while_group_task( <span class="keyword">const</span> Body& body ) : my_body(body), size(0) {} 
+<a name="l00065"></a>00065         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00066"></a>00066             <span class="keyword">typedef</span> while_iteration_task<Body> iteration_type;
+<a name="l00067"></a>00067             __TBB_ASSERT( size>0, NULL );
+<a name="l00068"></a>00068             task_list list;
+<a name="l00069"></a>00069             task* t; 
+<a name="l00070"></a>00070             size_t k=0; 
+<a name="l00071"></a>00071             <span class="keywordflow">for</span>(;;) {
+<a name="l00072"></a>00072                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_arg[k],my_body); 
+<a name="l00073"></a>00073                 <span class="keywordflow">if</span>( ++k==size ) <span class="keywordflow">break</span>;
+<a name="l00074"></a>00074                 list.push_back(*t);
+<a name="l00075"></a>00075             }
+<a name="l00076"></a>00076             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00077"></a>00077             spawn(list);
+<a name="l00078"></a>00078             spawn_and_wait_for_all(*t);
+<a name="l00079"></a>00079             <span class="keywordflow">return</span> NULL;
+<a name="l00080"></a>00080         }
+<a name="l00081"></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>while_task;
+<a name="l00082"></a>00082     };
+<a name="l00083"></a>00083     
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087     <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body>
+<a name="l00088"></a>00088     <span class="keyword">class </span>while_task: <span class="keyword">public</span> task {
+<a name="l00089"></a>00089         Stream& my_stream;
+<a name="l00090"></a>00090         <span class="keyword">const</span> Body& my_body;
+<a name="l00091"></a>00091         empty_task& my_barrier;
+<a name="l00092"></a>00092         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00093"></a>00093             <span class="keyword">typedef</span> while_group_task<Body> block_type;
+<a name="l00094"></a>00094             block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(my_barrier) ) block_type(my_body);
+<a name="l00095"></a>00095             size_t k=0; 
+<a name="l00096"></a>00096             <span class="keywordflow">while</span>( my_stream.pop_if_present(t.my_arg[k]) ) {
+<a name="l00097"></a>00097                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00098"></a>00098                     <span class="comment">// There might be more iterations.</span>
+<a name="l00099"></a>00099                     recycle_to_reexecute();
+<a name="l00100"></a>00100                     <span class="keywordflow">break</span>;
+<a name="l00101"></a>00101                 }
+<a name="l00102"></a>00102             }
+<a name="l00103"></a>00103             <span class="keywordflow">if</span>( k==0 ) {
+<a name="l00104"></a>00104                 destroy(t);
+<a name="l00105"></a>00105                 <span class="keywordflow">return</span> NULL;
+<a name="l00106"></a>00106             } <span class="keywordflow">else</span> {
+<a name="l00107"></a>00107                 t.size = k;
+<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &t;
+<a name="l00109"></a>00109             }
+<a name="l00110"></a>00110         }
+<a name="l00111"></a>00111         while_task( Stream& stream, <span class="keyword">const</span> Body& body, empty_task& barrier ) : 
+<a name="l00112"></a>00112             my_stream(stream),
+<a name="l00113"></a>00113             my_body(body),
+<a name="l00114"></a>00114             my_barrier(barrier)
+<a name="l00115"></a>00115         {} 
+<a name="l00116"></a>00116         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00157.html">tbb::parallel_while</a><Body>;
+<a name="l00117"></a>00117     };
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 } <span class="comment">// namespace internal</span>
+<a name="l00121"></a>00121 <span class="comment"></span>
 <a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <a class="code" href="a00158.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00125"></a>00125     <a class="code" href="a00158.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-<a name="l00126"></a>00126     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00158.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00129"></a>00129     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00130"></a>00130 
-<a name="l00132"></a><a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">00132</a>     pointer <a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00137"></a><a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">00137</a>     <span class="keywordtype">void</span> <a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
-<a name="l00138"></a>00138         <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140 
-<a name="l00142"></a><a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">00142</a>     size_type <a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
-<a name="l00143"></a>00143         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
-<a name="l00144"></a>00144         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type& val ) { <span class="keyword">new</span>(static_cast<void*>(p)) value_type(val); }
-<a name="l00147"></a>00147     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
-<a name="l00148"></a>00148 };
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>
+<a name="l00128"></a>00128 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00129"></a><a class="code" href="a00157.html">00129</a> <span class="keyword">class </span><a class="code" href="a00157.html">parallel_while</a>: internal::no_copy {
+<a name="l00130"></a>00130 <span class="keyword">public</span>:
+<a name="l00132"></a><a class="code" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
+<a name="l00133"></a>00133 
+<a name="l00135"></a><a class="code" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>() {
+<a name="l00136"></a>00136         <span class="keywordflow">if</span>( my_barrier ) {
+<a name="l00137"></a>00137             my_barrier-><a class="code" href="a00174.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);    
+<a name="l00138"></a>00138             my_barrier = NULL;
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 
+<a name="l00143"></a><a class="code" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>;
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146 
+<a name="l00149"></a>00149     <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
+<a name="l00150"></a>00150     <span class="keywordtype">void</span> <a class="code" href="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>( Stream& stream, <span class="keyword">const</span> Body& body );
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keywordtype">void</span> <a class="code" href="a00157.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>& item );
 <a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="keyword">template</span><>
-<a name="l00157"></a><a class="code" href="a00159.html">00157</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a><void> {
-<a name="l00158"></a>00158 <span class="keyword">public</span>:
-<a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-<a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-<a name="l00162"></a>00162     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00163"></a>00163         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator<U></a> other;
-<a name="l00164"></a>00164     };
-<a name="l00165"></a>00165 };
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00168"></a>00168 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00171"></a>00171 <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>;}
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 } <span class="comment">// namespace tbb</span>
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>
-<a name="l00180"></a>00180 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>
-<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
-<a name="l00196"></a>00196 <span class="preprocessor"></span>
-<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
+<a name="l00156"></a>00156 <span class="keyword">private</span>:
+<a name="l00157"></a>00157     <span class="keyword">const</span> Body* my_body;
+<a name="l00158"></a>00158     <a class="code" href="a00142.html">empty_task</a>* my_barrier;
+<a name="l00159"></a>00159 };
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00162"></a>00162 <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
+<a name="l00163"></a><a class="code" href="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00157.html">parallel_while<Body>::run</a>( Stream& stream, <span class="keyword">const</span> Body& body ) {
+<a name="l00164"></a>00164     <span class="keyword">using namespace </span>internal;
+<a name="l00165"></a>00165     <a class="code" href="a00142.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00142.html">empty_task</a>();
+<a name="l00166"></a>00166     my_body = &body;
+<a name="l00167"></a>00167     my_barrier = &barrier;
+<a name="l00168"></a>00168     my_barrier-><a class="code" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(2);
+<a name="l00169"></a>00169     while_task<Stream,Body>& w = *<span class="keyword">new</span>( my_barrier-><a class="code" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
+<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00174.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
+<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00174.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);
+<a name="l00172"></a>00172     my_barrier = NULL;
+<a name="l00173"></a>00173     my_body = NULL;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 
+<a name="l00176"></a>00176 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00177"></a><a class="code" href="a00157.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00157.html">parallel_while<Body>::add</a>( <span class="keyword">const</span> value_type& item ) {
+<a name="l00178"></a>00178     __TBB_ASSERT(my_barrier,<span class="stringliteral">"attempt to add to parallel_while that is not running"</span>);
+<a name="l00179"></a>00179     <span class="keyword">typedef</span> internal::while_iteration_task<Body> iteration_type;
+<a name="l00180"></a>00180     iteration_type& i = *<span class="keyword">new</span>( <a class="code" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(*my_barrier) ) iteration_type(item,*my_body);
+<a name="l00181"></a>00181     <a class="code" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00174.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>( i );
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 } <span class="comment">// namespace </span>
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_while */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00354.html b/doc/html/a00354.html
deleted file mode 100644
index 9ffb04a..0000000
--- a/doc/html/a00354.html
+++ /dev/null
@@ -1,611 +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>task.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>task.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">class </span>task;
-<a name="l00030"></a>00030 <span class="keyword">class </span>task_list;
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
-<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00035"></a>00035 
-<a name="l00037"></a>00037 <span class="keyword">namespace </span>internal {
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039     <span class="keyword">class </span>scheduler: no_copy {
-<a name="l00040"></a>00040     <span class="keyword">public</span>:
-<a name="l00042"></a>00042         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( task& first, task*& next ) = 0;
-<a name="l00043"></a>00043 
-<a name="l00045"></a>00045         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( task& parent, task* child ) = 0;
-<a name="l00046"></a>00046 
-<a name="l00048"></a>00048         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( task& first, task*& next ) = 0;
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
-<a name="l00052"></a>00052         <span class="keyword">virtual</span> ~scheduler() = 0;
-<a name="l00053"></a>00053     };
-<a name="l00054"></a>00054 
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057     <span class="keyword">typedef</span> intptr reference_count;
-<a name="l00058"></a>00058 
-<a name="l00060"></a>00060     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>    <span class="keyword">struct </span>context_list_node_t {
-<a name="l00064"></a>00064         context_list_node_t *my_prev,
-<a name="l00065"></a>00065                             *my_next;
-<a name="l00066"></a>00066     };
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
-<a name="l00069"></a>00069         task_group_context& my_context;
-<a name="l00070"></a>00070     <span class="keyword">public</span>:
-<a name="l00071"></a>00071         allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
-<a name="l00072"></a>00072         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00073"></a>00073         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00074"></a>00074     };
-<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="keyword">class </span>allocate_root_proxy: no_assign {
-<a name="l00078"></a>00078     <span class="keyword">public</span>:
-<a name="l00079"></a>00079         <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
-<a name="l00080"></a>00080         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
-<a name="l00081"></a>00081     };
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
-<a name="l00084"></a>00084     <span class="keyword">public</span>:
-<a name="l00085"></a>00085         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00086"></a>00086         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00087"></a>00087     };
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     <span class="keyword">class </span>allocate_child_proxy: no_assign {
-<a name="l00090"></a>00090     <span class="keyword">public</span>:
-<a name="l00091"></a>00091         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00092"></a>00092         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00093"></a>00093     };
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
-<a name="l00096"></a>00096         task& <span class="keyword">self</span>;
-<a name="l00097"></a>00097         task& parent;
-<a name="l00098"></a>00098     <span class="keyword">public</span>:
-<a name="l00099"></a>00099         allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
-<a name="l00100"></a>00100         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00101"></a>00101         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00102"></a>00102     };
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104     <span class="keyword">class </span>task_group_base;
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107 
-<a name="l00112"></a>00112     <span class="keyword">class </span>task_prefix {
-<a name="l00113"></a>00113     <span class="keyword">private</span>:
-<a name="l00114"></a>00114         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">tbb::task</a>;
-<a name="l00115"></a>00115         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00168.html">tbb::task_list</a>;
-<a name="l00116"></a>00116         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00117"></a>00117         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00118"></a>00118         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00119"></a>00119         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00120"></a>00120         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
-<a name="l00121"></a>00121         <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00125"></a>00125 <span class="preprocessor"></span>
-<a name="l00128"></a>00128 <span class="preprocessor">        task_group_context  *context;</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00130"></a>00130         
-<a name="l00132"></a>00132 
-<a name="l00137"></a>00137         scheduler* origin;
-<a name="l00138"></a>00138 
-<a name="l00140"></a>00140         scheduler* owner;
-<a name="l00141"></a>00141 
-<a name="l00143"></a>00143 
-<a name="l00146"></a>00146         <a class="code" href="a00166.html">tbb::task</a>* parent;
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149 
-<a name="l00153"></a>00153         reference_count ref_count;
-<a name="l00154"></a>00154 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157         <span class="keywordtype">int</span> depth;
-<a name="l00158"></a>00158 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164 
-<a name="l00168"></a>00168         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170         affinity_id affinity;
-<a name="l00171"></a>00171 
-<a name="l00173"></a>00173         <a class="code" href="a00166.html">tbb::task</a>* next;
-<a name="l00174"></a>00174 
-<a name="l00176"></a>00176         <a class="code" href="a00166.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
-<a name="l00177"></a>00177     };
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 } <span class="comment">// namespace internal</span>
-<a name="l00181"></a>00181 <span class="comment"></span>
-<a name="l00182"></a>00182 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span>
-<a name="l00184"></a>00184 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
-<a name="l00186"></a>00186 <span class="preprocessor">#else</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
-<a name="l00188"></a>00188         <span class="keyword">class </span>tbb_exception_ptr;
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00191"></a>00191 
-<a name="l00193"></a>00193 
-<a name="l00213"></a><a class="code" href="a00167.html">00213</a> <span class="keyword">class </span><a class="code" href="a00167.html">task_group_context</a> : internal::no_copy
-<a name="l00214"></a>00214 {
-<a name="l00215"></a>00215 <span class="keyword">private</span>:
-<a name="l00216"></a>00216 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00172.html">tbb_exception</a> <a class="code" href="a00172.html">exception_container_type</a>;
-<a name="l00218"></a>00218 <span class="preprocessor">#else</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00173.html">internal::tbb_exception_ptr</a> <a class="code" href="a00172.html">exception_container_type</a>;
-<a name="l00220"></a>00220 <span class="preprocessor">#endif</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span>
-<a name="l00222"></a>00222     <span class="keyword">enum</span> version_traits_word_layout {
-<a name="l00223"></a>00223         traits_offset = 16,
-<a name="l00224"></a>00224         version_mask = 0xFFFF,
-<a name="l00225"></a>00225         traits_mask = 0xFFFFul << traits_offset
-<a name="l00226"></a>00226     };
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="keyword">public</span>:
-<a name="l00229"></a>00229     <span class="keyword">enum</span> kind_type {
-<a name="l00230"></a>00230         isolated,
-<a name="l00231"></a>00231         bound
-<a name="l00232"></a>00232     };
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     <span class="keyword">enum</span> traits_type {
-<a name="l00235"></a>00235         exact_exception = 0x0001ul << traits_offset,
-<a name="l00236"></a>00236         no_cancellation = 0x0002ul << traits_offset,
-<a name="l00237"></a>00237         concurrent_wait = 0x0004ul << traits_offset,
-<a name="l00238"></a>00238 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span>        default_traits = 0
-<a name="l00240"></a>00240 <span class="preprocessor">#else</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span>        default_traits = exact_exception
-<a name="l00242"></a>00242 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00243"></a>00243     };
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="keyword">private</span>:
-<a name="l00246"></a>00246     <span class="keyword">union </span>{
-<a name="l00248"></a>00248         kind_type my_kind;
-<a name="l00249"></a>00249         uintptr_t _my_kind_aligner;
-<a name="l00250"></a>00250     };
-<a name="l00251"></a>00251 
-<a name="l00253"></a>00253     <a class="code" href="a00167.html">task_group_context</a> *my_parent;
-<a name="l00254"></a>00254 
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258     internal::context_list_node_t my_node;
-<a name="l00259"></a>00259 
-<a name="l00261"></a>00261 
-<a name="l00264"></a>00264     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize - 
-<a name="l00265"></a>00265                     2 * <span class="keyword">sizeof</span>(uintptr_t)- <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) - <span class="keyword">sizeof</span>(internal::context_list_node_t)];
-<a name="l00266"></a>00266     
-<a name="l00268"></a>00268     uintptr_t my_cancellation_requested;
-<a name="l00269"></a>00269     
-<a name="l00271"></a>00271 
-<a name="l00274"></a>00274     uintptr_t  my_version_and_traits;
-<a name="l00275"></a>00275 
-<a name="l00277"></a>00277     <a class="code" href="a00172.html">exception_container_type</a> *my_exception;
-<a name="l00278"></a>00278 
-<a name="l00280"></a>00280 
-<a name="l00283"></a>00283     <span class="keywordtype">void</span> *my_owner;
-<a name="l00284"></a>00284 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(intptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)];
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 <span class="keyword">public</span>:
-<a name="l00291"></a>00291 
-<a name="l00318"></a><a class="code" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">00318</a>     <a class="code" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> ( kind_type relation_with_parent = bound,
-<a name="l00319"></a>00319                          uintptr_t traits = default_traits )
-<a name="l00320"></a>00320         : my_kind(relation_with_parent)
-<a name="l00321"></a>00321         , my_version_and_traits(1 | traits)
-<a name="l00322"></a>00322     {
-<a name="l00323"></a>00323         <a class="code" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a>();
-<a name="l00324"></a>00324     }
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326     __TBB_EXPORTED_METHOD ~<a class="code" href="a00167.html">task_group_context</a> ();
-<a name="l00327"></a>00327 
-<a name="l00329"></a>00329 
-<a name="l00336"></a>00336     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ();
-<a name="l00337"></a>00337 
-<a name="l00339"></a>00339 
-<a name="l00346"></a>00346     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ();
-<a name="l00347"></a>00347 
-<a name="l00349"></a>00349     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () <span class="keyword">const</span>;
-<a name="l00350"></a>00350 
-<a name="l00352"></a>00352 
-<a name="l00358"></a>00358     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ();
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 <span class="keyword">protected</span>:
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a> ();
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <span class="keyword">private</span>:
-<a name="l00366"></a>00366     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>;
-<a name="l00367"></a>00367     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
-<a name="l00370"></a>00370     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
-<a name="l00371"></a>00371 
-<a name="l00374"></a>00374     <span class="keywordtype">void</span> propagate_cancellation_from_ancestors ();
-<a name="l00375"></a>00375 
-<a name="l00377"></a>00377     <span class="keywordtype">bool</span> is_alive () { 
-<a name="l00378"></a>00378 <span class="preprocessor">#if TBB_USE_DEBUG</span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span>        <span class="keywordflow">return</span> my_version_and_traits != 0xDeadBeef;
-<a name="l00380"></a>00380 <span class="preprocessor">#else</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00382"></a>00382 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
-<a name="l00383"></a>00383     }
-<a name="l00384"></a>00384 }; <span class="comment">// class task_group_context</span>
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00387"></a>00387 
-<a name="l00389"></a>00389 
-<a name="l00390"></a><a class="code" href="a00166.html">00390</a> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>: internal::no_copy {
-<a name="l00392"></a>00392     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
-<a name="l00393"></a>00393 
-<a name="l00395"></a>00395     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 <span class="keyword">protected</span>:
-<a name="l00399"></a><a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">00399</a>     <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>() {prefix().extra_state=1;}
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 <span class="keyword">public</span>:
-<a name="l00403"></a><a class="code" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">00403</a>     <span class="keyword">virtual</span> <a class="code" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>() {}
-<a name="l00404"></a>00404 
-<a name="l00406"></a>00406     <span class="keyword">virtual</span> <a class="code" href="a00166.html">task</a>* <a class="code" href="a00166.html#22c298cd40937a431a06777423f002f6">execute</a>() = 0;
-<a name="l00407"></a>00407 
-<a name="l00409"></a><a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">00409</a>     <span class="keyword">enum</span> <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
-<a name="l00411"></a>00411         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>,
-<a name="l00413"></a>00413         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>,
-<a name="l00415"></a>00415         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>,
-<a name="l00417"></a>00417         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>,
-<a name="l00419"></a>00419         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>,
-<a name="l00421"></a>00421         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
-<a name="l00422"></a>00422     };
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00425"></a>00425     <span class="comment">// Allocating tasks</span>
-<a name="l00426"></a>00426     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00427"></a>00427 
-<a name="l00429"></a><a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">00429</a>     <span class="keyword">static</span> internal::allocate_root_proxy <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>() {
-<a name="l00430"></a>00430         <span class="keywordflow">return</span> internal::allocate_root_proxy();
-<a name="l00431"></a>00431     }
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00435"></a><a class="code" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">00435</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
-<a name="l00437"></a>00437     }
-<a name="l00438"></a>00438 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00439"></a>00439 
-<a name="l00441"></a>00441 
-<a name="l00442"></a><a class="code" href="a00166.html#1434c79a5138993269d034008bff7329">00442</a>     internal::allocate_continuation_proxy& allocate_continuation() {
-<a name="l00443"></a>00443         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
-<a name="l00444"></a>00444     }
-<a name="l00445"></a>00445 
-<a name="l00447"></a><a class="code" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">00447</a>     internal::allocate_child_proxy& allocate_child() {
-<a name="l00448"></a>00448         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
-<a name="l00449"></a>00449     }
-<a name="l00450"></a>00450 
-<a name="l00452"></a>00452 
-<a name="l00454"></a><a class="code" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">00454</a>     internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00166.html">task</a>& t ) {
-<a name="l00455"></a>00455         <span class="keywordflow">return</span> internal::allocate_additional_child_of_proxy(*<span class="keyword">this</span>,t);
-<a name="l00456"></a>00456     }
-<a name="l00457"></a>00457 
-<a name="l00459"></a>00459 
-<a name="l00463"></a>00463     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD destroy( <a class="code" href="a00166.html">task</a>& victim );
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00466"></a>00466     <span class="comment">// Recycling of tasks</span>
-<a name="l00467"></a>00467     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00468"></a>00468 
-<a name="l00470"></a>00470 
-<a name="l00476"></a><a class="code" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">00476</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
-<a name="l00477"></a>00477         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00478"></a>00478         prefix().state = allocated;
-<a name="l00479"></a>00479     }
-<a name="l00480"></a>00480 
-<a name="l00482"></a>00482 
-<a name="l00483"></a><a class="code" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">00483</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
-<a name="l00484"></a>00484         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00485"></a>00485         prefix().state = recycle;
-<a name="l00486"></a>00486     }
-<a name="l00487"></a>00487 
-<a name="l00489"></a><a class="code" href="a00166.html#db399855177438bbc9cc61d508dae8d2">00489</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00166.html">task</a>& new_parent ) {
-<a name="l00490"></a>00490         internal::task_prefix& p = prefix();
-<a name="l00491"></a>00491         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00492"></a>00492         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
-<a name="l00493"></a>00493         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
-<a name="l00494"></a>00494         __TBB_ASSERT( new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
-<a name="l00495"></a>00495         __TBB_ASSERT( new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
-<a name="l00496"></a>00496         p.state = allocated;
-<a name="l00497"></a>00497         p.parent = &new_parent;
-<a name="l00498"></a>00498 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00499"></a>00499 <span class="preprocessor"></span>        p.<a class="code" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
-<a name="l00500"></a>00500 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00501"></a>00501     }
-<a name="l00502"></a>00502 
-<a name="l00504"></a>00504 
-<a name="l00505"></a><a class="code" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">00505</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
-<a name="l00506"></a>00506         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00507"></a>00507         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
-<a name="l00508"></a>00508         prefix().state = reexecute;
-<a name="l00509"></a>00509     }
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake </span>
-<a name="l00512"></a>00512     <span class="comment">// of backward source compatibility only</span>
-<a name="l00513"></a>00513     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
-<a name="l00514"></a>00514     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
-<a name="l00515"></a>00515     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00519"></a>00519     <span class="comment">// Spawning and blocking</span>
-<a name="l00520"></a>00520     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00521"></a>00521 
-<a name="l00523"></a><a class="code" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">00523</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
-<a name="l00524"></a>00524 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00525"></a>00525 <span class="preprocessor"></span>        internal_set_ref_count(count);
-<a name="l00526"></a>00526 <span class="preprocessor">#else</span>
-<a name="l00527"></a>00527 <span class="preprocessor"></span>        prefix().ref_count = count;
-<a name="l00528"></a>00528 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00529"></a>00529     }
-<a name="l00530"></a>00530 
-<a name="l00532"></a>00532 
-<a name="l00533"></a><a class="code" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">00533</a>     <span class="keywordtype">void</span> increment_ref_count() {
-<a name="l00534"></a>00534         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
-<a name="l00535"></a>00535     }
-<a name="l00536"></a>00536 
-<a name="l00538"></a>00538 
-<a name="l00539"></a><a class="code" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">00539</a>     <span class="keywordtype">int</span> decrement_ref_count() {
-<a name="l00540"></a>00540 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00541"></a>00541 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
-<a name="l00542"></a>00542 <span class="preprocessor">#else</span>
-<a name="l00543"></a>00543 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
-<a name="l00544"></a>00544 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00545"></a>00545     }
-<a name="l00546"></a>00546 
-<a name="l00548"></a>00548 
-<a name="l00552"></a><a class="code" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">00552</a>     <span class="keywordtype">void</span> spawn( <a class="code" href="a00166.html">task</a>& child ) {
-<a name="l00553"></a>00553         prefix().owner->spawn( child, child.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
-<a name="l00554"></a>00554     }
-<a name="l00555"></a>00555 
-<a name="l00557"></a>00557     <span class="keywordtype">void</span> spawn( <a class="code" href="a00168.html">task_list</a>& list );
-<a name="l00558"></a>00558 
-<a name="l00560"></a><a class="code" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00560</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00166.html">task</a>& child ) {
-<a name="l00561"></a>00561         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
-<a name="l00562"></a>00562     }
-<a name="l00563"></a>00563 
-<a name="l00565"></a>00565     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00168.html">task_list</a>& list );
-<a name="l00566"></a>00566 
-<a name="l00568"></a>00568 
-<a name="l00570"></a><a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">00570</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00166.html">task</a>& root ) {
-<a name="l00571"></a>00571         root.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573 
-<a name="l00575"></a>00575 
-<a name="l00577"></a>00577     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00168.html">task_list</a>& root_list );
-<a name="l00578"></a>00578 
-<a name="l00580"></a>00580 
-<a name="l00581"></a><a class="code" href="a00166.html#53d2615ad9c38859b4c8080936600283">00581</a>     <span class="keywordtype">void</span> wait_for_all() {
-<a name="l00582"></a>00582         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
-<a name="l00583"></a>00583     }
-<a name="l00584"></a>00584 
-<a name="l00586"></a>00586     <span class="keyword">static</span> <a class="code" href="a00166.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
-<a name="l00587"></a>00587 
-<a name="l00589"></a><a class="code" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">00589</a>     <a class="code" href="a00166.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00593"></a><a class="code" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">00593</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
-<a name="l00594"></a>00594 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>   
-<a name="l00595"></a>00595 
-<a name="l00597"></a><a class="code" href="a00166.html#f9169402702f56bf519448aaf34450aa">00597</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
-<a name="l00598"></a>00598         internal::task_prefix& p = prefix();
-<a name="l00599"></a>00599         internal::task_prefix& q = parent()->prefix();
-<a name="l00600"></a>00600         <span class="keywordflow">return</span> p.owner!=q.owner;
-<a name="l00601"></a>00601     }
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00604"></a>00604     <span class="comment">// Debugging</span>
-<a name="l00605"></a>00605     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00606"></a>00606 
-<a name="l00608"></a><a class="code" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">00608</a>     <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
-<a name="l00609"></a>00609 
-<a name="l00611"></a><a class="code" href="a00166.html#ad774f55eaec008ae02b236423209ced">00611</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
-<a name="l00612"></a>00612 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00613"></a>00613 <span class="preprocessor"></span>        internal::reference_count ref_count = prefix().ref_count;
-<a name="l00614"></a>00614         __TBB_ASSERT( ref_count==<span class="keywordtype">int</span>(ref_count), <span class="stringliteral">"integer overflow error"</span>);
-<a name="l00615"></a>00615 <span class="preprocessor">#endif</span>
-<a name="l00616"></a>00616 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
-<a name="l00617"></a>00617     }
-<a name="l00618"></a>00618 
-<a name="l00620"></a>00620     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00623"></a>00623     <span class="comment">// Affinity</span>
-<a name="l00624"></a>00624     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00625"></a>00625  
-<a name="l00627"></a>00627 
-<a name="l00628"></a><a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">00628</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
-<a name="l00629"></a>00629 
-<a name="l00631"></a><a class="code" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">00631</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
-<a name="l00632"></a>00632 
-<a name="l00634"></a><a class="code" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">00634</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
-<a name="l00635"></a>00635 
-<a name="l00637"></a>00637 
-<a name="l00641"></a>00641     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00645"></a>00645 <span class="preprocessor"></span>
-<a name="l00646"></a><a class="code" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">00646</a> <span class="preprocessor">    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }</span>
-<a name="l00647"></a>00647 <span class="preprocessor"></span>
-<a name="l00649"></a><a class="code" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">00649</a>     <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="l00650"></a>00650 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652 <span class="keyword">private</span>:
-<a name="l00653"></a>00653     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00168.html">task_list</a>;
-<a name="l00654"></a>00654     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00655"></a>00655     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00656"></a>00656 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00657"></a>00657 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00658"></a>00658 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00659"></a>00659     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00660"></a>00660     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00661"></a>00661     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
-<a name="l00662"></a>00662     
-<a name="l00663"></a>00663     <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
-<a name="l00664"></a>00664 
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
-<a name="l00668"></a>00668         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
-<a name="l00669"></a>00669     }
-<a name="l00670"></a>00670 }; <span class="comment">// class task</span>
-<a name="l00671"></a>00671 
-<a name="l00673"></a>00673 
-<a name="l00674"></a><a class="code" href="a00137.html">00674</a> <span class="keyword">class </span><a class="code" href="a00137.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00166.html">task</a> {
-<a name="l00675"></a>00675     <span class="comment">/*override*/</span> <a class="code" href="a00166.html">task</a>* execute() {
-<a name="l00676"></a>00676         <span class="keywordflow">return</span> NULL;
-<a name="l00677"></a>00677     }
-<a name="l00678"></a>00678 };
-<a name="l00679"></a>00679 
-<a name="l00681"></a>00681 
-<a name="l00683"></a><a class="code" href="a00168.html">00683</a> <span class="keyword">class </span><a class="code" href="a00168.html">task_list</a>: internal::no_copy {
-<a name="l00684"></a>00684 <span class="keyword">private</span>:
-<a name="l00685"></a>00685     <a class="code" href="a00166.html">task</a>* first;
-<a name="l00686"></a>00686     <a class="code" href="a00166.html">task</a>** next_ptr;
-<a name="l00687"></a>00687     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>;
-<a name="l00688"></a>00688 <span class="keyword">public</span>:
-<a name="l00690"></a><a class="code" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">00690</a>     <a class="code" href="a00168.html">task_list</a>() : first(NULL), next_ptr(&first) {}
-<a name="l00691"></a>00691 
-<a name="l00693"></a><a class="code" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">00693</a>     ~<a class="code" href="a00168.html">task_list</a>() {}
-<a name="l00694"></a>00694 
-<a name="l00696"></a><a class="code" href="a00168.html#f3ac31e092814b90929f81bb30441959">00696</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
-<a name="l00697"></a>00697 
-<a name="l00699"></a><a class="code" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">00699</a>     <span class="keywordtype">void</span> push_back( <a class="code" href="a00166.html">task</a>& <a class="code" href="a00166.html">task</a> ) {
-<a name="l00700"></a>00700         task.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
-<a name="l00701"></a>00701         *next_ptr = &task;
-<a name="l00702"></a>00702         next_ptr = &task.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00703"></a>00703     }
-<a name="l00704"></a>00704 
-<a name="l00706"></a><a class="code" href="a00168.html#5fe85df5ed524418389d34051750347d">00706</a>     <a class="code" href="a00166.html">task</a>& pop_front() {
-<a name="l00707"></a>00707         __TBB_ASSERT( !empty(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
-<a name="l00708"></a>00708         <a class="code" href="a00166.html">task</a>* result = first;
-<a name="l00709"></a>00709         first = result-><a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00710"></a>00710         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
-<a name="l00711"></a>00711         <span class="keywordflow">return</span> *result;
-<a name="l00712"></a>00712     }
-<a name="l00713"></a>00713 
-<a name="l00715"></a><a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">00715</a>     <span class="keywordtype">void</span> clear() {
-<a name="l00716"></a>00716         first=NULL;
-<a name="l00717"></a>00717         next_ptr=&first;
-<a name="l00718"></a>00718     }
-<a name="l00719"></a>00719 };
-<a name="l00720"></a>00720 
-<a name="l00721"></a><a class="code" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">00721</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn( <a class="code" href="a00168.html">task_list</a>& list ) {
-<a name="l00722"></a>00722     <span class="keywordflow">if</span>( <a class="code" href="a00166.html">task</a>* t = list.<a class="code" href="a00168.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
-<a name="l00723"></a>00723         prefix().owner->spawn( *t, *list.<a class="code" href="a00168.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
-<a name="l00724"></a>00724         list.<a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>();
-<a name="l00725"></a>00725     }
-<a name="l00726"></a>00726 }
-<a name="l00727"></a>00727 
-<a name="l00728"></a><a class="code" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">00728</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00168.html">task_list</a>& root_list ) {
-<a name="l00729"></a>00729     <span class="keywordflow">if</span>( <a class="code" href="a00166.html">task</a>* t = root_list.<a class="code" href="a00168.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
-<a name="l00730"></a>00730         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00168.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
-<a name="l00731"></a>00731         root_list.<a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>();
-<a name="l00732"></a>00732     }
-<a name="l00733"></a>00733 }
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 } <span class="comment">// namespace tbb</span>
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 <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& ) {
-<a name="l00738"></a>00738     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
-<a name="l00739"></a>00739 }
-<a name="l00740"></a>00740 
-<a name="l00741"></a>00741 <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& ) {
-<a name="l00742"></a>00742     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
-<a name="l00743"></a>00743 }
-<a name="l00744"></a>00744 
-<a name="l00745"></a>00745 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00746"></a>00746 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_with_context_proxy& p ) {
-<a name="l00747"></a>00747     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00748"></a>00748 }
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750 <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_with_context_proxy& p ) {
-<a name="l00751"></a>00751     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00752"></a>00752 }
-<a name="l00753"></a>00753 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_continuation_proxy& p ) {
-<a name="l00756"></a>00756     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00757"></a>00757 }
-<a name="l00758"></a>00758 
-<a name="l00759"></a>00759 <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_continuation_proxy& p ) {
-<a name="l00760"></a>00760     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00761"></a>00761 }
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_child_proxy& p ) {
-<a name="l00764"></a>00764     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00765"></a>00765 }
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767 <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_child_proxy& p ) {
-<a name="l00768"></a>00768     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00769"></a>00769 }
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_additional_child_of_proxy& p ) {
-<a name="l00772"></a>00772     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00773"></a>00773 }
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775 <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_additional_child_of_proxy& p ) {
-<a name="l00776"></a>00776     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00777"></a>00777 }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_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/a00342.html b/doc/html/a00355.html
similarity index 93%
copy from doc/html/a00342.html
copy to doc/html/a00355.html
index aef9058..3f2558c 100644
--- a/doc/html/a00342.html
+++ b/doc/html/a00355.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>partitioner.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -52,7 +52,7 @@
 <a name="l00032"></a>00032 
 <a name="l00034"></a>00034 
 <a name="l00035"></a>00035 <span class="keyword">class </span>affinity_partitioner_base_v3: no_copy {
-<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00115.html">tbb::affinity_partitioner</a>;
+<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00120.html">tbb::affinity_partitioner</a>;
 <a name="l00038"></a>00038 
 <a name="l00039"></a>00039     affinity_id* my_array;
 <a name="l00041"></a>00041     size_t my_size;
@@ -66,7 +66,7 @@
 <a name="l00053"></a>00053 <span class="keyword">class </span>partition_type_base {
 <a name="l00054"></a>00054 <span class="keyword">public</span>:
 <a name="l00055"></a>00055     <span class="keywordtype">void</span> set_affinity( task & ) {}
-<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
+<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
 <a name="l00057"></a>00057     task* continue_after_execute_range( task& ) {<span class="keywordflow">return</span> NULL;}
 <a name="l00058"></a>00058     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
 <a name="l00059"></a>00059     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, task& a, task& b ) {
@@ -84,9 +84,9 @@
 <a name="l00071"></a>00071 } <span class="comment">// namespace internal</span>
 <a name="l00073"></a>00073 <span class="comment"></span>
 <a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00160.html">00077</a> <span class="keyword">class </span><a class="code" href="a00160.html">simple_partitioner</a> {
+<a name="l00077"></a><a class="code" href="a00168.html">00077</a> <span class="keyword">class </span><a class="code" href="a00168.html">simple_partitioner</a> {
 <a name="l00078"></a>00078 <span class="keyword">public</span>:
-<a name="l00079"></a>00079     <a class="code" href="a00160.html">simple_partitioner</a>() {}
+<a name="l00079"></a>00079     <a class="code" href="a00168.html">simple_partitioner</a>() {}
 <a name="l00080"></a>00080 <span class="keyword">private</span>:
 <a name="l00081"></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>internal::start_for;
 <a name="l00082"></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>internal::start_reduce;
@@ -94,16 +94,16 @@
 <a name="l00084"></a>00084 
 <a name="l00085"></a>00085     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
 <a name="l00086"></a>00086     <span class="keyword">public</span>:
-<a name="l00087"></a>00087         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>& ) {}
-<a name="l00089"></a>00089         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00165.html">split</a> ) {}
+<a name="l00087"></a>00087         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00174.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> <a class="code" href="a00168.html">simple_partitioner</a>& ) {}
+<a name="l00089"></a>00089         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00173.html">split</a> ) {}
 <a name="l00090"></a>00090     };
 <a name="l00091"></a>00091 };
 <a name="l00092"></a>00092 
 <a name="l00094"></a>00094 
-<a name="l00097"></a><a class="code" href="a00120.html">00097</a> <span class="keyword">class </span><a class="code" href="a00120.html">auto_partitioner</a> {
+<a name="l00097"></a><a class="code" href="a00125.html">00097</a> <span class="keyword">class </span><a class="code" href="a00125.html">auto_partitioner</a> {
 <a name="l00098"></a>00098 <span class="keyword">public</span>:
-<a name="l00099"></a>00099     <a class="code" href="a00120.html">auto_partitioner</a>() {}
+<a name="l00099"></a>00099     <a class="code" href="a00125.html">auto_partitioner</a>() {}
 <a name="l00100"></a>00100 
 <a name="l00101"></a>00101 <span class="keyword">private</span>:
 <a name="l00102"></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>internal::start_for;
@@ -114,21 +114,21 @@
 <a name="l00107"></a>00107         size_t num_chunks;
 <a name="l00108"></a>00108         <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
 <a name="l00109"></a>00109 <span class="keyword">public</span>:
-<a name="l00110"></a>00110         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a> &t) {
-<a name="l00111"></a>00111             <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
+<a name="l00110"></a>00110         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00174.html">task</a> &t) {
+<a name="l00111"></a>00111             <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00174.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
 <a name="l00112"></a>00112                 num_chunks = VICTIM_CHUNKS;
 <a name="l00113"></a>00113             <span class="keywordflow">return</span> num_chunks==1;
 <a name="l00114"></a>00114         }
-<a name="l00115"></a>00115         partition_type( <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
-<a name="l00116"></a>00116         partition_type( partition_type& pt, <a class="code" href="a00165.html">split</a> ) {
+<a name="l00115"></a>00115         partition_type( <span class="keyword">const</span> <a class="code" href="a00125.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+<a name="l00116"></a>00116         partition_type( partition_type& pt, <a class="code" href="a00173.html">split</a> ) {
 <a name="l00117"></a>00117             num_chunks = pt.num_chunks /= 2u;
 <a name="l00118"></a>00118         }
 <a name="l00119"></a>00119     };
 <a name="l00120"></a>00120 };
 <a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00115.html">00123</a> <span class="keyword">class </span><a class="code" href="a00115.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
+<a name="l00123"></a><a class="code" href="a00120.html">00123</a> <span class="keyword">class </span><a class="code" href="a00120.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
 <a name="l00124"></a>00124 <span class="keyword">public</span>:
-<a name="l00125"></a>00125     <a class="code" href="a00115.html">affinity_partitioner</a>() {}
+<a name="l00125"></a>00125     <a class="code" href="a00120.html">affinity_partitioner</a>() {}
 <a name="l00126"></a>00126 
 <a name="l00127"></a>00127 <span class="keyword">private</span>:
 <a name="l00128"></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>internal::start_for;
@@ -147,11 +147,11 @@
 <a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
 <a name="l00144"></a>00144 
 <a name="l00145"></a>00145     internal::affinity_id* my_array;
-<a name="l00146"></a>00146     <a class="code" href="a00168.html">task_list</a> delay_list;
+<a name="l00146"></a>00146     <a class="code" href="a00176.html">task_list</a> delay_list;
 <a name="l00147"></a>00147     <span class="keywordtype">unsigned</span> map_begin, map_end;
 <a name="l00148"></a>00148     size_t num_chunks;
 <a name="l00149"></a>00149 <span class="keyword">public</span>:
-<a name="l00150"></a>00150     affinity_partition_type( <a class="code" href="a00115.html">affinity_partitioner</a>& ap ) {
+<a name="l00150"></a>00150     affinity_partition_type( <a class="code" href="a00120.html">affinity_partitioner</a>& ap ) {
 <a name="l00151"></a>00151         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
 <a name="l00152"></a>00152         ap.resize(factor);
 <a name="l00153"></a>00153         my_array = ap.my_array;
@@ -180,7 +180,7 @@
 <a name="l00176"></a>00176         <span class="keywordflow">if</span>( map_begin<map_end )
 <a name="l00177"></a>00177             t.set_affinity( my_array[map_begin] );
 <a name="l00178"></a>00178     }
-<a name="l00179"></a>00179     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
+<a name="l00179"></a>00179     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
 <a name="l00180"></a>00180         <span class="keywordflow">if</span>( map_begin<map_end ) 
 <a name="l00181"></a>00181             my_array[map_begin] = id;
 <a name="l00182"></a>00182     }
diff --git a/doc/html/a00347.html b/doc/html/a00360.html
similarity index 83%
copy from doc/html/a00347.html
copy to doc/html/a00360.html
index 48b1ebf..e536029 100644
--- a/doc/html/a00347.html
+++ b/doc/html/a00360.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>pipeline.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -66,9 +66,9 @@
 <a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
 <a name="l00048"></a>00048 <span class="comment"></span>
 <a name="l00050"></a>00050 
-<a name="l00051"></a><a class="code" href="a00139.html">00051</a> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>: internal::no_copy {
+<a name="l00051"></a><a class="code" href="a00144.html">00051</a> <span class="keyword">class </span><a class="code" href="a00144.html">filter</a>: internal::no_copy {
 <a name="l00052"></a>00052 <span class="keyword">private</span>:
-<a name="l00054"></a>00054     <span class="keyword">static</span> <a class="code" href="a00139.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(internal::intptr(-1));}
+<a name="l00054"></a>00054     <span class="keyword">static</span> <a class="code" href="a00144.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(internal::intptr(-1));}
 <a name="l00055"></a>00055     
 <a name="l00057"></a>00057     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_serial = 0x1; 
 <a name="l00058"></a>00058 
@@ -80,23 +80,23 @@
 <a name="l00067"></a>00067     <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(5);
 <a name="l00068"></a>00068     <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>
 <a name="l00069"></a>00069 <span class="keyword">public</span>:
-<a name="l00070"></a><a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">00070</a>     <span class="keyword">enum</span> <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> {
-<a name="l00072"></a>00072         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order, 
-<a name="l00074"></a>00074         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial,
-<a name="l00076"></a>00076         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order,
-<a name="l00078"></a>00078         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order
+<a name="l00070"></a><a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">00070</a>     <span class="keyword">enum</span> <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> {
+<a name="l00072"></a>00072         <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order, 
+<a name="l00074"></a>00074         <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial,
+<a name="l00076"></a>00076         <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order,
+<a name="l00078"></a>00078         <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order
 <a name="l00079"></a>00079     };
 <a name="l00080"></a>00080 <span class="keyword">protected</span>:
-<a name="l00081"></a>00081     <a class="code" href="a00139.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
+<a name="l00081"></a>00081     <a class="code" href="a00144.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
 <a name="l00082"></a>00082         next_filter_in_pipeline(not_in_pipeline()),
 <a name="l00083"></a>00083         my_input_buffer(NULL),
-<a name="l00084"></a>00084         my_filter_mode(static_cast<unsigned char>(is_serial_ ? <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> : <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a>)),
+<a name="l00084"></a>00084         my_filter_mode(static_cast<unsigned char>(is_serial_ ? <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> : <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a>)),
 <a name="l00085"></a>00085         prev_filter_in_pipeline(not_in_pipeline()),
 <a name="l00086"></a>00086         my_pipeline(NULL),
 <a name="l00087"></a>00087         next_segment(NULL)
 <a name="l00088"></a>00088     {}
 <a name="l00089"></a>00089     
-<a name="l00090"></a>00090     filter( <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode ) :
+<a name="l00090"></a>00090     filter( <a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode ) :
 <a name="l00091"></a>00091         next_filter_in_pipeline(not_in_pipeline()),
 <a name="l00092"></a>00092         my_input_buffer(NULL),
 <a name="l00093"></a>00093         my_filter_mode(static_cast<unsigned char>(filter_mode)),
@@ -106,52 +106,52 @@
 <a name="l00097"></a>00097     {}
 <a name="l00098"></a>00098 
 <a name="l00099"></a>00099 <span class="keyword">public</span>:
-<a name="l00101"></a><a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">00101</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
+<a name="l00101"></a><a class="code" href="a00144.html#fcfec27656a69ff2072802ac001e936f">00101</a>     <span class="keywordtype">bool</span> <a class="code" href="a00144.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
 <a name="l00102"></a>00102         <span class="keywordflow">return</span> bool( my_filter_mode & filter_is_serial );
 <a name="l00103"></a>00103     }  
 <a name="l00104"></a>00104     
-<a name="l00106"></a><a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
+<a name="l00106"></a><a class="code" href="a00144.html#cd53206c4795ef2df5df26b795caf692">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00144.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
 <a name="l00107"></a>00107         <span class="keywordflow">return</span> (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
 <a name="l00108"></a>00108     }
 <a name="l00109"></a>00109 
-<a name="l00111"></a><a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">00111</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
+<a name="l00111"></a><a class="code" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">00111</a>     <span class="keywordtype">bool</span> <a class="code" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
 <a name="l00112"></a>00112         <span class="keywordflow">return</span> ( my_filter_mode & filter_is_bound )==filter_is_bound;
 <a name="l00113"></a>00113     }
 <a name="l00114"></a>00114 
 <a name="l00116"></a>00116 
-<a name="l00117"></a>00117     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
+<a name="l00117"></a>00117     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
 <a name="l00118"></a>00118 
 <a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
+<a name="l00121"></a>00121     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00144.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
 <a name="l00122"></a>00122 
 <a name="l00123"></a>00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
 <a name="l00125"></a>00125 <span class="preprocessor"></span>
-<a name="l00127"></a><a class="code" href="a00139.html#56275eb889c77c4807967133e21401bd">00127</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
+<a name="l00127"></a><a class="code" href="a00144.html#56275eb889c77c4807967133e21401bd">00127</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
 <a name="l00128"></a>00128 <span class="preprocessor">#endif</span>
 <a name="l00129"></a>00129 <span class="preprocessor"></span>
 <a name="l00130"></a>00130 <span class="keyword">private</span>:
-<a name="l00132"></a>00132     <a class="code" href="a00139.html">filter</a>* next_filter_in_pipeline;
+<a name="l00132"></a>00132     <a class="code" href="a00144.html">filter</a>* next_filter_in_pipeline;
 <a name="l00133"></a>00133 
 <a name="l00135"></a>00135 
 <a name="l00136"></a>00136     internal::input_buffer* my_input_buffer;
 <a name="l00137"></a>00137 
 <a name="l00138"></a>00138     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
 <a name="l00139"></a>00139     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00140"></a>00140     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a>;
-<a name="l00141"></a>00141     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
+<a name="l00140"></a>00140     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00158.html">pipeline</a>;
+<a name="l00141"></a>00141     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00182.html">thread_bound_filter</a>;
 <a name="l00142"></a>00142 
 <a name="l00144"></a>00144     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
 <a name="l00145"></a>00145 
-<a name="l00147"></a>00147     <a class="code" href="a00139.html">filter</a>* prev_filter_in_pipeline;
+<a name="l00147"></a>00147     <a class="code" href="a00144.html">filter</a>* prev_filter_in_pipeline;
 <a name="l00148"></a>00148 
-<a name="l00150"></a>00150     <a class="code" href="a00150.html">pipeline</a>* my_pipeline;
+<a name="l00150"></a>00150     <a class="code" href="a00158.html">pipeline</a>* my_pipeline;
 <a name="l00151"></a>00151 
 <a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <a class="code" href="a00139.html">filter</a>* next_segment;
+<a name="l00154"></a>00154     <a class="code" href="a00144.html">filter</a>* next_segment;
 <a name="l00155"></a>00155 };
 <a name="l00156"></a>00156 
 <a name="l00158"></a>00158 
-<a name="l00159"></a><a class="code" href="a00175.html">00159</a> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00139.html">filter</a> {
+<a name="l00159"></a><a class="code" href="a00182.html">00159</a> <span class="keyword">class </span><a class="code" href="a00182.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00144.html">filter</a> {
 <a name="l00160"></a>00160 <span class="keyword">public</span>:
 <a name="l00161"></a>00161     <span class="keyword">enum</span> result_type {
 <a name="l00162"></a>00162         <span class="comment">// item was processed</span>
@@ -162,61 +162,61 @@
 <a name="l00167"></a>00167         end_of_stream
 <a name="l00168"></a>00168     };
 <a name="l00169"></a>00169 <span class="keyword">protected</span>:
-<a name="l00170"></a>00170     <a class="code" href="a00175.html">thread_bound_filter</a>(<a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode): 
-<a name="l00171"></a>00171          <a class="code" href="a00139.html">filter</a>(static_cast<mode>(filter_mode | filter::filter_is_bound))
+<a name="l00170"></a>00170     <a class="code" href="a00182.html">thread_bound_filter</a>(<a class="code" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode): 
+<a name="l00171"></a>00171          <a class="code" href="a00144.html">filter</a>(static_cast<mode>(filter_mode | filter::filter_is_bound))
 <a name="l00172"></a>00172     {}
 <a name="l00173"></a>00173 <span class="keyword">public</span>:
 <a name="l00175"></a>00175 
-<a name="l00180"></a>00180     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
+<a name="l00180"></a>00180     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00182.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
 <a name="l00181"></a>00181 
 <a name="l00183"></a>00183 
-<a name="l00187"></a>00187     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
+<a name="l00187"></a>00187     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00182.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
 <a name="l00188"></a>00188 
 <a name="l00189"></a>00189 <span class="keyword">private</span>:
 <a name="l00191"></a>00191     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
 <a name="l00192"></a>00192 };
 <a name="l00193"></a>00193 
 <a name="l00195"></a>00195 
-<a name="l00196"></a><a class="code" href="a00150.html">00196</a> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a> {
+<a name="l00196"></a><a class="code" href="a00158.html">00196</a> <span class="keyword">class </span><a class="code" href="a00158.html">pipeline</a> {
 <a name="l00197"></a>00197 <span class="keyword">public</span>:
-<a name="l00199"></a>00199     __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
+<a name="l00199"></a>00199     __TBB_EXPORTED_METHOD <a class="code" href="a00158.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
 <a name="l00200"></a>00200 
-<a name="l00203"></a>00203     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
+<a name="l00203"></a>00203     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00158.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
 <a name="l00204"></a>00204 
-<a name="l00206"></a>00206     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00139.html">filter</a>& filter_ );
+<a name="l00206"></a>00206     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00158.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00144.html">filter</a>& filter_ );
 <a name="l00207"></a>00207 
-<a name="l00209"></a>00209     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
+<a name="l00209"></a>00209     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00158.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
 <a name="l00210"></a>00210 
 <a name="l00211"></a>00211 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
 <a name="l00213"></a>00213 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
 <a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00215"></a>00215 <span class="preprocessor"></span>
-<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
+<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00158.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
 <a name="l00218"></a>00218 
 <a name="l00219"></a>00219 <span class="keyword">private</span>:
 <a name="l00220"></a>00220     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
 <a name="l00221"></a>00221     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00222"></a>00222     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>;
-<a name="l00223"></a>00223     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
+<a name="l00222"></a>00222     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00144.html">filter</a>;
+<a name="l00223"></a>00223     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00182.html">thread_bound_filter</a>;
 <a name="l00224"></a>00224     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
 <a name="l00225"></a>00225 
-<a name="l00227"></a>00227     <a class="code" href="a00139.html">filter</a>* filter_list;
+<a name="l00227"></a>00227     <a class="code" href="a00144.html">filter</a>* filter_list;
 <a name="l00228"></a>00228 
-<a name="l00230"></a>00230     <a class="code" href="a00139.html">filter</a>* filter_end;
+<a name="l00230"></a>00230     <a class="code" href="a00144.html">filter</a>* filter_end;
 <a name="l00231"></a>00231 
-<a name="l00233"></a>00233     <a class="code" href="a00166.html">task</a>* end_counter;
+<a name="l00233"></a>00233     <a class="code" href="a00174.html">task</a>* end_counter;
 <a name="l00234"></a>00234 
-<a name="l00236"></a>00236     <a class="code" href="a00117.html">atomic<internal::Token></a> input_tokens;
+<a name="l00236"></a>00236     <a class="code" href="a00122.html">atomic<internal::Token></a> input_tokens;
 <a name="l00237"></a>00237 
-<a name="l00239"></a>00239     <a class="code" href="a00117.html">atomic<internal::Token></a> token_counter;
+<a name="l00239"></a>00239     <a class="code" href="a00122.html">atomic<internal::Token></a> token_counter;
 <a name="l00240"></a>00240 
 <a name="l00242"></a>00242     <span class="keywordtype">bool</span> end_of_input;
 <a name="l00243"></a>00243 
 <a name="l00245"></a>00245     <span class="keywordtype">bool</span> has_thread_bound_filters;
 <a name="l00246"></a>00246 
-<a name="l00248"></a>00248     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00139.html">filter</a>& filter_ );
+<a name="l00248"></a>00248     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00144.html">filter</a>& filter_ );
 <a name="l00249"></a>00249 
-<a name="l00251"></a>00251     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00166.html">task</a>& <span class="keyword">self</span> );
+<a name="l00251"></a>00251     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00174.html">task</a>& <span class="keyword">self</span> );
 <a name="l00252"></a>00252 
 <a name="l00253"></a>00253 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
 <a name="l00255"></a>00255 <span class="preprocessor">    void clear_filters();</span>
diff --git a/doc/html/a00348.html b/doc/html/a00361.html
similarity index 83%
rename from doc/html/a00348.html
rename to doc/html/a00361.html
index 231211e..ebb635f 100644
--- a/doc/html/a00348.html
+++ b/doc/html/a00361.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>queuing_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,9 +49,9 @@
 <a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
 <a name="l00029"></a>00029 
 <a name="l00031"></a>00031 
-<a name="l00032"></a><a class="code" href="a00152.html">00032</a> <span class="keyword">class </span><a class="code" href="a00152.html">queuing_mutex</a> {
+<a name="l00032"></a><a class="code" href="a00160.html">00032</a> <span class="keyword">class </span><a class="code" href="a00160.html">queuing_mutex</a> {
 <a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">00035</a>     <a class="code" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>() {
+<a name="l00035"></a><a class="code" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">00035</a>     <a class="code" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>() {
 <a name="l00036"></a>00036         q_tail = NULL;
 <a name="l00037"></a>00037 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
 <a name="l00038"></a>00038 <span class="preprocessor"></span>        internal_construct();
@@ -59,37 +59,37 @@
 <a name="l00040"></a>00040 <span class="preprocessor"></span>    }
 <a name="l00041"></a>00041 
 <a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00153.html">00045</a>     <span class="keyword">class </span><a class="code" href="a00153.html">scoped_lock</a>: internal::no_copy {
+<a name="l00045"></a><a class="code" href="a00161.html">00045</a>     <span class="keyword">class </span><a class="code" href="a00161.html">scoped_lock</a>: internal::no_copy {
 <a name="l00047"></a>00047         <span class="keywordtype">void</span> initialize() {
-<a name="l00048"></a>00048             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00048"></a>00048             <a class="code" href="a00150.html">mutex</a> = NULL;
 <a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_ASSERT</span>
 <a name="l00050"></a>00050 <span class="preprocessor"></span>            internal::poison_pointer(next);
 <a name="l00051"></a>00051 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
 <a name="l00052"></a>00052         }
 <a name="l00053"></a>00053     <span class="keyword">public</span>:
 <a name="l00055"></a>00055 
-<a name="l00056"></a><a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">00056</a>         <a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
+<a name="l00056"></a><a class="code" href="a00161.html#db0fa3967491014572e24d6607bdc971">00056</a>         <a class="code" href="a00161.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
 <a name="l00057"></a>00057 
 <a name="l00059"></a>00059 
-<a name="l00060"></a><a class="code" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">00060</a>         <a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00152.html">queuing_mutex</a>& m ) {
+<a name="l00060"></a><a class="code" href="a00161.html#9b51ef972f5618ac17caadb58841ab6d">00060</a>         <a class="code" href="a00161.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00160.html">queuing_mutex</a>& m ) {
 <a name="l00061"></a>00061             initialize();
-<a name="l00062"></a>00062             <a class="code" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
+<a name="l00062"></a>00062             <a class="code" href="a00161.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
 <a name="l00063"></a>00063         }
 <a name="l00064"></a>00064 
-<a name="l00066"></a><a class="code" href="a00153.html#ac2c576a93570957d694192a5f491443">00066</a>         <a class="code" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
-<a name="l00067"></a>00067             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00066"></a><a class="code" href="a00161.html#ac2c576a93570957d694192a5f491443">00066</a>         <a class="code" href="a00161.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
+<a name="l00067"></a>00067             <span class="keywordflow">if</span>( <a class="code" href="a00150.html">mutex</a> ) <a class="code" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
 <a name="l00068"></a>00068         }
 <a name="l00069"></a>00069 
-<a name="l00071"></a>00071         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00152.html">queuing_mutex</a>& m );
+<a name="l00071"></a>00071         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00161.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00160.html">queuing_mutex</a>& m );
 <a name="l00072"></a>00072 
-<a name="l00074"></a>00074         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00152.html">queuing_mutex</a>& m );
+<a name="l00074"></a>00074         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00161.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00160.html">queuing_mutex</a>& m );
 <a name="l00075"></a>00075 
-<a name="l00077"></a>00077         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00077"></a>00077         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
 <a name="l00078"></a>00078 
 <a name="l00079"></a>00079     <span class="keyword">private</span>:
-<a name="l00081"></a>00081         <a class="code" href="a00152.html">queuing_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00081"></a>00081         <a class="code" href="a00160.html">queuing_mutex</a>* <a class="code" href="a00150.html">mutex</a>;
 <a name="l00082"></a>00082 
-<a name="l00084"></a>00084         <a class="code" href="a00153.html">scoped_lock</a> *next;
+<a name="l00084"></a>00084         <a class="code" href="a00161.html">scoped_lock</a> *next;
 <a name="l00085"></a>00085 
 <a name="l00087"></a>00087 
 <a name="l00090"></a>00090         internal::uintptr going;
@@ -104,7 +104,7 @@
 <a name="l00099"></a>00099 
 <a name="l00100"></a>00100     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
 <a name="l00101"></a>00101 <span class="keyword">private</span>:
-<a name="l00103"></a>00103     <a class="code" href="a00117.html">atomic<scoped_lock*></a> q_tail;
+<a name="l00103"></a>00103     <a class="code" href="a00122.html">atomic<scoped_lock*></a> q_tail;
 <a name="l00104"></a>00104 
 <a name="l00105"></a>00105 };
 <a name="l00106"></a>00106 
diff --git a/doc/html/a00349.html b/doc/html/a00362.html
similarity index 83%
rename from doc/html/a00349.html
rename to doc/html/a00362.html
index 0192598..a547547 100644
--- a/doc/html/a00349.html
+++ b/doc/html/a00362.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>queuing_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -49,16 +49,16 @@
 <a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
 <a name="l00029"></a>00029 
 <a name="l00031"></a>00031 
-<a name="l00034"></a><a class="code" href="a00154.html">00034</a> <span class="keyword">class </span><a class="code" href="a00154.html">queuing_rw_mutex</a> {
+<a name="l00034"></a><a class="code" href="a00162.html">00034</a> <span class="keyword">class </span><a class="code" href="a00162.html">queuing_rw_mutex</a> {
 <a name="l00035"></a>00035 <span class="keyword">public</span>:
-<a name="l00037"></a><a class="code" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">00037</a>     <a class="code" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>() {
+<a name="l00037"></a><a class="code" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">00037</a>     <a class="code" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>() {
 <a name="l00038"></a>00038         q_tail = NULL;
 <a name="l00039"></a>00039 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
 <a name="l00040"></a>00040 <span class="preprocessor"></span>        internal_construct();
 <a name="l00041"></a>00041 <span class="preprocessor">#endif</span>
 <a name="l00042"></a>00042 <span class="preprocessor"></span>    }
 <a name="l00043"></a>00043 
-<a name="l00045"></a><a class="code" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">00045</a>     <a class="code" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>() {
+<a name="l00045"></a><a class="code" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">00045</a>     <a class="code" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>() {
 <a name="l00046"></a>00046 <span class="preprocessor">#if TBB_USE_ASSERT</span>
 <a name="l00047"></a>00047 <span class="preprocessor"></span>        __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
 <a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
@@ -68,9 +68,9 @@
 <a name="l00052"></a>00052     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
 <a name="l00053"></a>00053 
 <a name="l00055"></a>00055 
-<a name="l00057"></a><a class="code" href="a00155.html">00057</a>     <span class="keyword">class </span><a class="code" href="a00155.html">scoped_lock</a>: internal::no_copy {
+<a name="l00057"></a><a class="code" href="a00163.html">00057</a>     <span class="keyword">class </span><a class="code" href="a00163.html">scoped_lock</a>: internal::no_copy {
 <a name="l00059"></a>00059         <span class="keywordtype">void</span> initialize() {
-<a name="l00060"></a>00060             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00060"></a>00060             <a class="code" href="a00150.html">mutex</a> = NULL;
 <a name="l00061"></a>00061 <span class="preprocessor">#if TBB_USE_ASSERT</span>
 <a name="l00062"></a>00062 <span class="preprocessor"></span>            state = 0xFF; <span class="comment">// Set to invalid state</span>
 <a name="l00063"></a>00063             internal::poison_pointer(next);
@@ -79,37 +79,37 @@
 <a name="l00066"></a>00066         }
 <a name="l00067"></a>00067     <span class="keyword">public</span>:
 <a name="l00069"></a>00069 
-<a name="l00070"></a><a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">00070</a>         <a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
+<a name="l00070"></a><a class="code" href="a00163.html#c62e365be7bcbba091c9ea7454a4d22c">00070</a>         <a class="code" href="a00163.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
 <a name="l00071"></a>00071 
 <a name="l00073"></a>00073 
-<a name="l00074"></a><a class="code" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">00074</a>         <a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
+<a name="l00074"></a><a class="code" href="a00163.html#fbb8798792d3aebb136c46fc63d2529e">00074</a>         <a class="code" href="a00163.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00162.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
 <a name="l00075"></a>00075             initialize();
-<a name="l00076"></a>00076             <a class="code" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
+<a name="l00076"></a>00076             <a class="code" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
 <a name="l00077"></a>00077         }
 <a name="l00078"></a>00078 
-<a name="l00080"></a><a class="code" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">00080</a>         <a class="code" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00080"></a><a class="code" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">00080</a>         <a class="code" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span>( <a class="code" href="a00150.html">mutex</a> ) <a class="code" href="a00163.html#67ae221109ddc69510ab593874e435d4">release</a>();
 <a name="l00082"></a>00082         }
 <a name="l00083"></a>00083 
-<a name="l00085"></a>00085         <span class="keywordtype">void</span> <a class="code" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00085"></a>00085         <span class="keywordtype">void</span> <a class="code" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00162.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
 <a name="l00086"></a>00086 
-<a name="l00088"></a>00088         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00088"></a>00088         <span class="keywordtype">bool</span> <a class="code" href="a00163.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00162.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
 <a name="l00089"></a>00089 
-<a name="l00091"></a>00091         <span class="keywordtype">void</span> <a class="code" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00091"></a>00091         <span class="keywordtype">void</span> <a class="code" href="a00163.html#67ae221109ddc69510ab593874e435d4">release</a>();
 <a name="l00092"></a>00092 
 <a name="l00094"></a>00094 
-<a name="l00095"></a>00095         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>();
+<a name="l00095"></a>00095         <span class="keywordtype">bool</span> <a class="code" href="a00163.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>();
 <a name="l00096"></a>00096 
-<a name="l00098"></a>00098         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>();
+<a name="l00098"></a>00098         <span class="keywordtype">bool</span> <a class="code" href="a00163.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>();
 <a name="l00099"></a>00099 
 <a name="l00100"></a>00100     <span class="keyword">private</span>:
-<a name="l00102"></a>00102         <a class="code" href="a00154.html">queuing_rw_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00102"></a>00102         <a class="code" href="a00162.html">queuing_rw_mutex</a>* <a class="code" href="a00150.html">mutex</a>;
 <a name="l00103"></a>00103 
-<a name="l00105"></a>00105         <a class="code" href="a00155.html">scoped_lock</a> * prev, * next;
+<a name="l00105"></a>00105         <a class="code" href="a00163.html">scoped_lock</a> * prev, * next;
 <a name="l00106"></a>00106 
 <a name="l00107"></a>00107         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state_t;
 <a name="l00108"></a>00108 
-<a name="l00110"></a>00110         <a class="code" href="a00117.html">atomic<state_t></a> state;
+<a name="l00110"></a>00110         <a class="code" href="a00122.html">atomic<state_t></a> state;
 <a name="l00111"></a>00111 
 <a name="l00113"></a>00113 
 <a name="l00114"></a>00114         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> going;
@@ -136,7 +136,7 @@
 <a name="l00141"></a>00141     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
 <a name="l00142"></a>00142 
 <a name="l00143"></a>00143 <span class="keyword">private</span>:
-<a name="l00145"></a>00145     <a class="code" href="a00117.html">atomic<scoped_lock*></a> q_tail;
+<a name="l00145"></a>00145     <a class="code" href="a00122.html">atomic<scoped_lock*></a> q_tail;
 <a name="l00146"></a>00146 
 <a name="l00147"></a>00147 };
 <a name="l00148"></a>00148 
diff --git a/doc/html/a00363.html b/doc/html/a00363.html
index 0213dbe..8cdb4d5 100644
--- a/doc/html/a00363.html
+++ b/doc/html/a00363.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>task_group.h Source File</title>
+<title>recursive_mutex.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>task_group.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>recursive_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,206 +39,203 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_group_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_group_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_recursive_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_recursive_mutex_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <exception></span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00030"></a>00030 <span class="keyword">class </span>task_handle {
-<a name="l00031"></a>00031     F my_func;
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00034"></a>00034     task_handle( <span class="keyword">const</span> F& f ) : my_func(f) {}
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036     <span class="keywordtype">void</span> operator()() { my_func(); }
-<a name="l00037"></a>00037 };
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keyword">enum</span> task_group_status {
-<a name="l00040"></a>00040     not_complete,
-<a name="l00041"></a>00041     complete,
-<a name="l00042"></a>00042     canceled
-<a name="l00043"></a>00043 };
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">namespace </span>internal {
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
-<a name="l00048"></a>00048 <span class="comment">//#pragma warning(disable: 588)</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00051"></a>00051 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
-<a name="l00052"></a>00052     F my_func;
-<a name="l00053"></a>00053     <span class="comment">/*override*/</span> <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00054"></a>00054         my_func();
-<a name="l00055"></a>00055         <span class="keywordflow">return</span> NULL;
-<a name="l00056"></a>00056     }
-<a name="l00057"></a>00057 <span class="keyword">public</span>:
-<a name="l00058"></a>00058     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
-<a name="l00059"></a>00059 };
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00062"></a>00062 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
-<a name="l00063"></a>00063     task_handle<F>& my_handle;
-<a name="l00064"></a>00064     <span class="comment">/*override*/</span> <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00065"></a>00065         my_handle();
-<a name="l00066"></a>00066         <span class="keywordflow">return</span> NULL;
-<a name="l00067"></a>00067     }
-<a name="l00068"></a>00068 <span class="keyword">public</span>:
-<a name="l00069"></a>00069     task_handle_task( task_handle<F>& h ) : my_handle(h) {}
-<a name="l00070"></a>00070 };
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <windows.h></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
+<a name="l00029"></a>00029 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
+<a name="l00030"></a>00030 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#include <pthread.h></span>
+<a name="l00036"></a>00036 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
+<a name="l00037"></a>00037 <span class="comment">// Use this internal TBB function to throw an exception</span>
+<a name="l00038"></a>00038   <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
+<a name="l00039"></a>00039 } } <span class="comment">//namespaces</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#include <new></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048 <span class="keyword">namespace </span>tbb {
+<a name="l00050"></a>00050 
+<a name="l00052"></a><a class="code" href="a00164.html">00052</a> <span class="keyword">class </span><a class="code" href="a00164.html">recursive_mutex</a> {
+<a name="l00053"></a>00053 <span class="keyword">public</span>:
+<a name="l00055"></a><a class="code" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00055</a>     <a class="code" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
+<a name="l00056"></a>00056 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>        internal_construct();
+<a name="l00058"></a>00058 <span class="preprocessor">#else</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
+<a name="l00061"></a>00061 <span class="preprocessor">  #else</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
+<a name="l00063"></a>00063         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &mtx_attr );
+<a name="l00064"></a>00064         <span class="keywordflow">if</span>( error_code )
+<a name="l00065"></a>00065             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutexattr_init failed"</span>);
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067         pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
+<a name="l00068"></a>00068         error_code = pthread_mutex_init( &impl, &mtx_attr );
+<a name="l00069"></a>00069         <span class="keywordflow">if</span>( error_code )
+<a name="l00070"></a>00070             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
 <a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">class </span>task_group_base : internal::no_copy {
-<a name="l00073"></a>00073 <span class="keyword">protected</span>:
-<a name="l00074"></a>00074     empty_task* my_root;
-<a name="l00075"></a>00075     task_group_context my_context;
+<a name="l00072"></a>00072         pthread_mutexattr_destroy( &mtx_attr );
+<a name="l00073"></a>00073 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00075"></a>00075     };
 <a name="l00076"></a>00076 
-<a name="l00077"></a>00077     task& owner () { <span class="keywordflow">return</span> *my_root; }
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00080"></a>00080     task_group_status internal_run_and_wait( F& f ) {
-<a name="l00081"></a>00081         <span class="keywordflow">try</span> {
-<a name="l00082"></a>00082             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
-<a name="l00083"></a>00083                 f();
-<a name="l00084"></a>00084         } <span class="keywordflow">catch</span> ( ... ) {
-<a name="l00085"></a>00085             my_context.register_pending_exception();
-<a name="l00086"></a>00086         }
-<a name="l00087"></a>00087         <span class="keywordflow">return</span> wait();
-<a name="l00088"></a>00088     }
+<a name="l00077"></a>00077     ~<a class="code" href="a00164.html">recursive_mutex</a>() {
+<a name="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>        internal_destroy();
+<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
+<a name="l00083"></a>00083 <span class="preprocessor">  #else</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00088"></a>00088     };
 <a name="l00089"></a>00089 
-<a name="l00090"></a>00090     <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> Task>
-<a name="l00091"></a>00091     <span class="keywordtype">void</span> internal_run( F& f ) {
-<a name="l00092"></a>00092         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
-<a name="l00093"></a>00093     }
+<a name="l00090"></a>00090     <span class="keyword">class </span>scoped_lock;
+<a name="l00091"></a>00091     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00092"></a>00092 
 <a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keyword">public</span>:
-<a name="l00096"></a>00096     task_group_base( uintptr_t traits = 0 )
-<a name="l00097"></a>00097         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
-<a name="l00098"></a>00098     {
-<a name="l00099"></a>00099         my_root = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
-<a name="l00100"></a>00100         my_root->set_ref_count(1);
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00104"></a>00104     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00105"></a>00105         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     task_group_status wait() {
-<a name="l00109"></a>00109         <span class="keywordflow">try</span> {
-<a name="l00110"></a>00110             owner().prefix().owner->wait_for_all( *my_root, NULL );
-<a name="l00111"></a>00111         } <span class="keywordflow">catch</span> ( ... ) {
-<a name="l00112"></a>00112             my_context.reset();
-<a name="l00113"></a>00113             <span class="keywordflow">throw</span>;
-<a name="l00114"></a>00114         }
-<a name="l00115"></a>00115         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
-<a name="l00116"></a>00116             my_context.reset();
-<a name="l00117"></a>00117             <span class="keywordflow">return</span> canceled;
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119         <span class="keywordflow">return</span> complete;
-<a name="l00120"></a>00120     }
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     <span class="keywordtype">bool</span> is_canceling() {
-<a name="l00123"></a>00123         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
-<a name="l00124"></a>00124     }
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126     <span class="keywordtype">void</span> cancel() {
-<a name="l00127"></a>00127         my_context.cancel_group_execution();
-<a name="l00128"></a>00128     }
-<a name="l00129"></a>00129 }; <span class="comment">// class task_group_base</span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 } <span class="comment">// namespace internal</span>
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00134"></a>00134 <span class="keyword">public</span>:
-<a name="l00135"></a>00135     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+<a name="l00096"></a><a class="code" href="a00165.html">00096</a>     <span class="keyword">class </span><a class="code" href="a00165.html">scoped_lock</a>: internal::no_copy {
+<a name="l00097"></a>00097     <span class="keyword">public</span>:
+<a name="l00099"></a><a class="code" href="a00165.html#d82d4d36fbf9727a493d26ae50855fe7">00099</a>         <a class="code" href="a00165.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00100"></a>00100 
+<a name="l00102"></a><a class="code" href="a00165.html#dec17713c4c1321ac8fec66816d0c602">00102</a>         <a class="code" href="a00165.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00164.html">recursive_mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00103"></a>00103 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>            my_mutex = &mutex; 
+<a name="l00105"></a>00105 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00106"></a>00106             <a class="code" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
+<a name="l00107"></a>00107         }
+<a name="l00108"></a>00108 
+<a name="l00110"></a><a class="code" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00110</a>         <a class="code" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
+<a name="l00111"></a>00111             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00112"></a>00112                 <a class="code" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
+<a name="l00113"></a>00113         }
+<a name="l00114"></a>00114 
+<a name="l00116"></a><a class="code" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">00116</a>         <span class="keywordtype">void</span> <a class="code" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00164.html">recursive_mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00117"></a>00117 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>            internal_acquire( mutex );
+<a name="l00119"></a>00119 <span class="preprocessor">#else</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span>            my_mutex = &mutex;
+<a name="l00121"></a>00121             mutex.<a class="code" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
+<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">00126</a>         <span class="keywordtype">bool</span> <a class="code" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00164.html">recursive_mutex</a>& <a class="code" href="a00150.html">mutex</a> ) {
+<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
+<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00164.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
+<a name="l00131"></a>00131             <span class="keywordflow">if</span>( result )
+<a name="l00132"></a>00132                 my_mutex = &mutex;
+<a name="l00133"></a>00133             <span class="keywordflow">return</span> result;
+<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00135"></a>00135         }
 <a name="l00136"></a>00136 
-<a name="l00137"></a>00137     ~task_group() <span class="keyword">try</span> {
-<a name="l00138"></a>00138         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
-<a name="l00139"></a>00139         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
-<a name="l00140"></a>00140             my_root->wait_for_all();
-<a name="l00141"></a>00141         owner().destroy(*my_root);
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143     <span class="keywordflow">catch</span> (...) {
-<a name="l00144"></a>00144         owner().destroy(*my_root);
-<a name="l00145"></a>00145         <span class="keywordflow">throw</span>;
-<a name="l00146"></a>00146     }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="preprocessor">#if __SUNPRO_CC</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00150"></a>00150     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00151"></a>00151         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00152"></a>00152     }
-<a name="l00153"></a>00153 <span class="preprocessor">#else</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
-<a name="l00155"></a>00155 <span class="preprocessor">#endif</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>
-<a name="l00157"></a>00157     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00158"></a>00158     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
-<a name="l00159"></a>00159         internal_run< const F, internal::function_task<F> >( f );
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00163"></a>00163     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
-<a name="l00164"></a>00164         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00168"></a>00168     task_group_status run_and_wait( task_handle<F>& h ) {
-<a name="l00169"></a>00169       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171 }; <span class="comment">// class task_group</span>
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="keyword">class </span>missing_wait : <span class="keyword">public</span> std::exception {
-<a name="l00174"></a>00174 <span class="keyword">public</span>:
-<a name="l00175"></a>00175     <span class="comment">/*override*/</span> 
-<a name="l00176"></a>00176     <span class="keyword">const</span> <span class="keywordtype">char</span>* what() const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"wait() was not called on the structured_task_group"</span>; }
-<a name="l00177"></a>00177 };
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00180"></a>00180 <span class="keyword">public</span>:
-<a name="l00181"></a>00181     ~structured_task_group() {
-<a name="l00182"></a>00182         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
-<a name="l00183"></a>00183             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
-<a name="l00184"></a>00184             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
-<a name="l00185"></a>00185             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
-<a name="l00186"></a>00186             <span class="keywordflow">if</span> ( !is_canceling() )
-<a name="l00187"></a>00187                 cancel();
-<a name="l00188"></a>00188             my_root->wait_for_all();
-<a name="l00189"></a>00189             owner().destroy(*my_root);
-<a name="l00190"></a>00190             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
-<a name="l00191"></a>00191                 <span class="keywordflow">throw</span> missing_wait();
-<a name="l00192"></a>00192         }
-<a name="l00193"></a>00193         <span class="keywordflow">else</span>
-<a name="l00194"></a>00194             owner().destroy(*my_root);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00198"></a>00198     task_group_status run_and_wait ( task_handle<F>& h ) {
-<a name="l00199"></a>00199         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     task_group_status wait() {
-<a name="l00203"></a>00203         __TBB_ASSERT ( my_root->ref_count() != 0, <span class="stringliteral">"wait() can be called only once during the structured_task_group lifetime"</span> );
-<a name="l00204"></a>00204         <span class="keywordflow">return</span> task_group_base::wait();
-<a name="l00205"></a>00205     }
-<a name="l00206"></a>00206 }; <span class="comment">// class structured_task_group</span>
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 <span class="keyword">inline</span> 
-<a name="l00209"></a>00209 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
-<a name="l00210"></a>00210     <span class="keywordflow">return</span> <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="keyword">template</span><<span class="keyword">class</span> F>
-<a name="l00214"></a>00214 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
-<a name="l00215"></a>00215     <span class="keywordflow">return</span> task_handle<F>( f );
-<a name="l00216"></a>00216 }
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 } <span class="comment">// namespace tbb</span>
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_H */</span>
+<a name="l00138"></a><a class="code" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">00138</a>         <span class="keywordtype">void</span> <a class="code" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
+<a name="l00139"></a>00139 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>            internal_release();
+<a name="l00141"></a>00141 <span class="preprocessor">#else</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
+<a name="l00143"></a>00143             my_mutex = NULL;
+<a name="l00144"></a>00144 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00145"></a>00145         }
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147     <span class="keyword">private</span>:
+<a name="l00149"></a>00149         <a class="code" href="a00164.html">recursive_mutex</a>* my_mutex;
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00164.html">recursive_mutex</a>& m );
+<a name="l00153"></a>00153 
+<a name="l00155"></a>00155         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00164.html">recursive_mutex</a>& m );
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00164.html">recursive_mutex</a>;
+<a name="l00161"></a>00161     };
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="comment">// Mutex traits</span>
+<a name="l00164"></a>00164     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00165"></a>00165     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+<a name="l00166"></a>00166     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168     <span class="comment">// C++0x compatibility interface</span>
+<a name="l00169"></a>00169     
+<a name="l00171"></a><a class="code" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">00171</a>     <span class="keywordtype">void</span> <a class="code" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>() {
+<a name="l00172"></a>00172 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00174"></a>00174         <span class="keyword">new</span>(tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00165.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00175"></a>00175 <span class="preprocessor">#else</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
+<a name="l00178"></a>00178 <span class="preprocessor">  #else</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
+<a name="l00180"></a>00180 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00181"></a>00181 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00182"></a>00182     }
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00186"></a><a class="code" href="a00164.html#86e719b0afee25704af11ab97694d240">00186</a>     <span class="keywordtype">bool</span> <a class="code" href="a00164.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
+<a name="l00187"></a>00187 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00189"></a>00189         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00165.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00190"></a>00190 <span class="preprocessor">#else        </span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
+<a name="l00193"></a>00193 <span class="preprocessor">  #else</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
+<a name="l00195"></a>00195 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198 
+<a name="l00200"></a><a class="code" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">00200</a>     <span class="keywordtype">void</span> <a class="code" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
+<a name="l00201"></a>00201 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00203"></a>00203         <a class="code" href="a00165.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00204"></a>00204         s.<a class="code" href="a00165.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00205"></a>00205         s.<a class="code" href="a00165.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
+<a name="l00206"></a>00206 <span class="preprocessor">#else</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
+<a name="l00209"></a>00209 <span class="preprocessor">  #else</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
+<a name="l00211"></a>00211 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00212"></a>00212 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00213"></a>00213     }
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 <span class="keyword">private</span>:
+<a name="l00216"></a>00216 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
+<a name="l00218"></a>00218     <span class="keyword">enum</span> state_t {
+<a name="l00219"></a>00219         INITIALIZED=0x1234,
+<a name="l00220"></a>00220         DESTROYED=0x789A,
+<a name="l00221"></a>00221     } state;
+<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00224"></a>00224 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00225"></a>00225 
+<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00231"></a>00231 };
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 } <span class="comment">// namespace tbb </span>
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_mutex_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00351.html b/doc/html/a00364.html
similarity index 88%
copy from doc/html/a00351.html
copy to doc/html/a00364.html
index ccc4fc9..aa6817f 100644
--- a/doc/html/a00351.html
+++ b/doc/html/a00364.html
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>scalable_allocator.h</h1><a href="a00210.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>scalable_allocator.h</h1><a href="a00218.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -59,23 +59,23 @@
 <a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
 <a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
 <a name="l00045"></a>00045 
-<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
 <a name="l00049"></a>00049 
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
 <a name="l00053"></a>00053 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
 <a name="l00057"></a>00057 
-<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
 <a name="l00061"></a>00061 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
 <a name="l00065"></a>00065 
-<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
 <a name="l00069"></a>00069 
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
 <a name="l00073"></a>00073 
-<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00243.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
 <a name="l00079"></a>00079 
 <a name="l00080"></a>00080 <span class="preprocessor">#ifdef __cplusplus</span>
 <a name="l00081"></a>00081 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
@@ -105,7 +105,7 @@
 <a name="l00105"></a>00105 <span class="preprocessor"></span>
 <a name="l00107"></a>00107 
 <a name="l00110"></a>00110 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00111"></a><a class="code" href="a00158.html">00111</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a> {
+<a name="l00111"></a><a class="code" href="a00166.html">00111</a> <span class="keyword">class </span><a class="code" href="a00166.html">scalable_allocator</a> {
 <a name="l00112"></a>00112 <span class="keyword">public</span>:
 <a name="l00113"></a>00113     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
 <a name="l00114"></a>00114     <span class="keyword">typedef</span> value_type* pointer;
@@ -115,29 +115,29 @@
 <a name="l00118"></a>00118     <span class="keyword">typedef</span> size_t size_type;
 <a name="l00119"></a>00119     <span class="keyword">typedef</span> ptrdiff_t difference_type;
 <a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00121"></a>00121         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator<U></a> other;
+<a name="l00121"></a>00121         <span class="keyword">typedef</span> <a class="code" href="a00166.html">scalable_allocator<U></a> other;
 <a name="l00122"></a>00122     };
 <a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <a class="code" href="a00158.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00125"></a>00125     <a class="code" href="a00158.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-<a name="l00126"></a>00126     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00158.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+<a name="l00124"></a>00124     <a class="code" href="a00166.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00125"></a>00125     <a class="code" href="a00166.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00166.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+<a name="l00126"></a>00126     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00166.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00166.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
 <a name="l00127"></a>00127 
 <a name="l00128"></a>00128     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00129"></a>00129     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00130"></a>00130 
-<a name="l00132"></a><a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">00132</a>     pointer <a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+<a name="l00132"></a><a class="code" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">00132</a>     pointer <a class="code" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
+<a name="l00133"></a>00133         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
 <a name="l00134"></a>00134     }
 <a name="l00135"></a>00135 
-<a name="l00137"></a><a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">00137</a>     <span class="keywordtype">void</span> <a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
-<a name="l00138"></a>00138         <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
+<a name="l00137"></a><a class="code" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">00137</a>     <span class="keywordtype">void</span> <a class="code" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
+<a name="l00138"></a>00138         <a class="code" href="a00243.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
 <a name="l00139"></a>00139     }
 <a name="l00140"></a>00140 
-<a name="l00142"></a><a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">00142</a>     size_type <a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
+<a name="l00142"></a><a class="code" href="a00166.html#880e766f1d913988c21973dbdd874fd5">00142</a>     size_type <a class="code" href="a00166.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
 <a name="l00143"></a>00143         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
 <a name="l00144"></a>00144         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
 <a name="l00145"></a>00145     }
-<a name="l00146"></a>00146     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type& val ) { <span class="keyword">new</span>(static_cast<void*>(p)) value_type(val); }
+<a name="l00146"></a>00146     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
 <a name="l00147"></a>00147     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
 <a name="l00148"></a>00148 };
 <a name="l00149"></a>00149 
@@ -147,18 +147,18 @@
 <a name="l00153"></a>00153 <span class="preprocessor"></span>
 <a name="l00155"></a>00155 
 <a name="l00156"></a>00156 <span class="keyword">template</span><>
-<a name="l00157"></a><a class="code" href="a00159.html">00157</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a><void> {
+<a name="l00157"></a><a class="code" href="a00167.html">00157</a> <span class="keyword">class </span><a class="code" href="a00166.html">scalable_allocator</a><void> {
 <a name="l00158"></a>00158 <span class="keyword">public</span>:
 <a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
 <a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
 <a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
 <a name="l00162"></a>00162     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00163"></a>00163         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator<U></a> other;
+<a name="l00163"></a>00163         <span class="keyword">typedef</span> <a class="code" href="a00166.html">scalable_allocator<U></a> other;
 <a name="l00164"></a>00164     };
 <a name="l00165"></a>00165 };
 <a name="l00166"></a>00166 
 <a name="l00167"></a>00167 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00168"></a>00168 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00168"></a>00168 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00166.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00166.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
 <a name="l00169"></a>00169 
 <a name="l00170"></a>00170 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
 <a name="l00171"></a>00171 <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>;}
diff --git a/doc/html/a00352.html b/doc/html/a00365.html
similarity index 81%
rename from doc/html/a00352.html
rename to doc/html/a00365.html
index 684cc98..10c360e 100644
--- a/doc/html/a00352.html
+++ b/doc/html/a00365.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>spin_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -52,59 +52,59 @@
 <a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
 <a name="l00032"></a>00032 
 <a name="l00034"></a>00034 
-<a name="l00039"></a><a class="code" href="a00161.html">00039</a> <span class="keyword">class </span><a class="code" href="a00161.html">spin_mutex</a> {
+<a name="l00039"></a><a class="code" href="a00169.html">00039</a> <span class="keyword">class </span><a class="code" href="a00169.html">spin_mutex</a> {
 <a name="l00041"></a>00041     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> flag;
 <a name="l00042"></a>00042 
 <a name="l00043"></a>00043 <span class="keyword">public</span>:
 <a name="l00045"></a>00045 
-<a name="l00046"></a><a class="code" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>() : flag(0) {
+<a name="l00046"></a><a class="code" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>() : flag(0) {
 <a name="l00047"></a>00047 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
 <a name="l00048"></a>00048 <span class="preprocessor"></span>        internal_construct();
 <a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
 <a name="l00050"></a>00050 <span class="preprocessor"></span>    }
 <a name="l00051"></a>00051 
-<a name="l00053"></a><a class="code" href="a00162.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00162.html">scoped_lock</a> : internal::no_copy {
+<a name="l00053"></a><a class="code" href="a00170.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00170.html">scoped_lock</a> : internal::no_copy {
 <a name="l00054"></a>00054     <span class="keyword">private</span>:
-<a name="l00056"></a>00056         <a class="code" href="a00161.html">spin_mutex</a>* my_mutex; 
+<a name="l00056"></a>00056         <a class="code" href="a00169.html">spin_mutex</a>* my_mutex; 
 <a name="l00057"></a>00057 
 <a name="l00059"></a>00059         internal::uintptr my_unlock_value;
 <a name="l00060"></a>00060 
-<a name="l00062"></a>00062         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00161.html">spin_mutex</a>& m );
+<a name="l00062"></a>00062         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00169.html">spin_mutex</a>& m );
 <a name="l00063"></a>00063 
-<a name="l00065"></a>00065         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00161.html">spin_mutex</a>& m );
+<a name="l00065"></a>00065         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00169.html">spin_mutex</a>& m );
 <a name="l00066"></a>00066 
 <a name="l00068"></a>00068         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
 <a name="l00069"></a>00069 
-<a name="l00070"></a>00070         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00161.html">spin_mutex</a>;
+<a name="l00070"></a>00070         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00169.html">spin_mutex</a>;
 <a name="l00071"></a>00071 
 <a name="l00072"></a>00072     <span class="keyword">public</span>:
-<a name="l00074"></a><a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>() : my_mutex(NULL), my_unlock_value(0) {}
+<a name="l00074"></a><a class="code" href="a00170.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00170.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>() : my_mutex(NULL), my_unlock_value(0) {}
 <a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00161.html">spin_mutex</a>& m ) { 
+<a name="l00077"></a><a class="code" href="a00170.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00170.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00169.html">spin_mutex</a>& m ) { 
 <a name="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00079"></a>00079 <span class="preprocessor"></span>            my_mutex=NULL;
 <a name="l00080"></a>00080             internal_acquire(m);
 <a name="l00081"></a>00081 <span class="preprocessor">#else</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00082"></a>00082 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00169.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
 <a name="l00083"></a>00083             my_mutex=&m;
 <a name="l00084"></a>00084 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
 <a name="l00085"></a>00085         }
 <a name="l00086"></a>00086 
-<a name="l00088"></a><a class="code" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00161.html">spin_mutex</a>& m ) {
+<a name="l00088"></a><a class="code" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00169.html">spin_mutex</a>& m ) {
 <a name="l00089"></a>00089 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00090"></a>00090 <span class="preprocessor"></span>            internal_acquire(m);
 <a name="l00091"></a>00091 <span class="preprocessor">#else</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00092"></a>00092 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00169.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
 <a name="l00093"></a>00093             my_mutex = &m;
 <a name="l00094"></a>00094 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
 <a name="l00095"></a>00095         }
 <a name="l00096"></a>00096 
 <a name="l00098"></a>00098 
-<a name="l00099"></a><a class="code" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00161.html">spin_mutex</a>& m ) {
+<a name="l00099"></a><a class="code" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00169.html">spin_mutex</a>& m ) {
 <a name="l00100"></a>00100 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00101"></a>00101 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire(m);
 <a name="l00102"></a>00102 <span class="preprocessor">#else</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = __TBB_TryLockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00103"></a>00103 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = __TBB_TryLockByte(m.<a class="code" href="a00169.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
 <a name="l00104"></a>00104             <span class="keywordflow">if</span>( result ) {
 <a name="l00105"></a>00105                 my_unlock_value = 0;
 <a name="l00106"></a>00106                 my_mutex = &m;
@@ -113,21 +113,21 @@
 <a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
 <a name="l00110"></a>00110         }
 <a name="l00111"></a>00111 
-<a name="l00113"></a><a class="code" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>() {
+<a name="l00113"></a><a class="code" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>() {
 <a name="l00114"></a>00114 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00115"></a>00115 <span class="preprocessor"></span>            internal_release();
 <a name="l00116"></a>00116 <span class="preprocessor">#else</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>            __TBB_store_with_release(my_mutex-><a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
+<a name="l00117"></a>00117 <span class="preprocessor"></span>            __TBB_store_with_release(my_mutex-><a class="code" href="a00169.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
 <a name="l00118"></a>00118             my_mutex = NULL;
 <a name="l00119"></a>00119 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
 <a name="l00120"></a>00120         }
 <a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>() {
+<a name="l00123"></a><a class="code" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>() {
 <a name="l00124"></a>00124             <span class="keywordflow">if</span>( my_mutex ) {
 <a name="l00125"></a>00125 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00126"></a>00126 <span class="preprocessor"></span>                internal_release();
 <a name="l00127"></a>00127 <span class="preprocessor">#else</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>                __TBB_store_with_release(my_mutex-><a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
+<a name="l00128"></a>00128 <span class="preprocessor"></span>                __TBB_store_with_release(my_mutex-><a class="code" href="a00169.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast<unsigned char>(my_unlock_value));
 <a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
 <a name="l00130"></a>00130             }
 <a name="l00131"></a>00131         }
@@ -142,32 +142,32 @@
 <a name="l00140"></a>00140 
 <a name="l00141"></a>00141     <span class="comment">// ISO C++0x compatibility methods</span>
 <a name="l00142"></a>00142 
-<a name="l00144"></a><a class="code" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>() {
+<a name="l00144"></a><a class="code" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>() {
 <a name="l00145"></a>00145 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00162.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00146"></a>00146 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00170.html">scoped_lock</a>(*<span class="keyword">this</span>);
 <a name="l00148"></a>00148 <span class="preprocessor">#else</span>
 <a name="l00149"></a>00149 <span class="preprocessor"></span>        __TBB_LockByte(flag);
 <a name="l00150"></a>00150 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS*/</span>
 <a name="l00151"></a>00151     }
 <a name="l00152"></a>00152 
 <a name="l00154"></a>00154 
-<a name="l00155"></a><a class="code" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>() {
+<a name="l00155"></a><a class="code" href="a00169.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00169.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>() {
 <a name="l00156"></a>00156 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00157"></a>00157 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00158"></a>00158         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00162.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00157"></a>00157 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00158"></a>00158         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00170.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
 <a name="l00159"></a>00159 <span class="preprocessor">#else</span>
 <a name="l00160"></a>00160 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_TryLockByte(flag);
 <a name="l00161"></a>00161 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS*/</span>
 <a name="l00162"></a>00162     }
 <a name="l00163"></a>00163 
-<a name="l00165"></a><a class="code" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>() {
+<a name="l00165"></a><a class="code" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>() {
 <a name="l00166"></a>00166 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00168"></a>00168         <a class="code" href="a00162.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00169"></a>00169         s.<a class="code" href="a00162.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00170"></a>00170         s.<a class="code" href="a00162.html#0821c9dc231cd41586306fd54f701873">my_unlock_value</a> = 0;
-<a name="l00171"></a>00171         s.<a class="code" href="a00162.html#8f4d19aa2d6d112034d281eed0dab5fa">internal_release</a>();
+<a name="l00167"></a>00167 <span class="preprocessor"></span>        <a class="code" href="a00121.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00168"></a>00168         <a class="code" href="a00170.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00169"></a>00169         s.<a class="code" href="a00170.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00170"></a>00170         s.<a class="code" href="a00170.html#0821c9dc231cd41586306fd54f701873">my_unlock_value</a> = 0;
+<a name="l00171"></a>00171         s.<a class="code" href="a00170.html#8f4d19aa2d6d112034d281eed0dab5fa">internal_release</a>();
 <a name="l00172"></a>00172 <span class="preprocessor">#else</span>
 <a name="l00173"></a>00173 <span class="preprocessor"></span>        __TBB_store_with_release(flag, 0);
 <a name="l00174"></a>00174 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
diff --git a/doc/html/a00353.html b/doc/html/a00366.html
similarity index 84%
rename from doc/html/a00353.html
rename to doc/html/a00366.html
index 6b80feb..2443c51 100644
--- a/doc/html/a00353.html
+++ b/doc/html/a00366.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>spin_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -52,7 +52,7 @@
 <a name="l00031"></a>00031 <span class="keyword">typedef</span> spin_rw_mutex_v3 spin_rw_mutex;
 <a name="l00032"></a>00032 
 <a name="l00034"></a>00034 
-<a name="l00035"></a><a class="code" href="a00163.html">00035</a> <span class="keyword">class </span><a class="code" href="a00163.html">spin_rw_mutex_v3</a> {
+<a name="l00035"></a><a class="code" href="a00171.html">00035</a> <span class="keyword">class </span><a class="code" href="a00171.html">spin_rw_mutex_v3</a> {
 <a name="l00037"></a>00037 
 <a name="l00039"></a>00039     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_acquire_writer();
 <a name="l00040"></a>00040 
@@ -73,88 +73,88 @@
 <a name="l00062"></a>00062     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_reader();
 <a name="l00063"></a>00063 
 <a name="l00065"></a>00065 <span class="keyword">public</span>:
-<a name="l00067"></a><a class="code" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>() : state(0) {
+<a name="l00067"></a><a class="code" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>() : state(0) {
 <a name="l00068"></a>00068 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
 <a name="l00069"></a>00069 <span class="preprocessor"></span>        internal_construct();
 <a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
 <a name="l00071"></a>00071 <span class="preprocessor"></span>    }
 <a name="l00072"></a>00072 
 <a name="l00073"></a>00073 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00075"></a><a class="code" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">00075</a> <span class="preprocessor">    ~spin_rw_mutex_v3() {</span>
+<a name="l00075"></a><a class="code" href="a00171.html#9a815fb2759e55072ed413f1b6970cf3">00075</a> <span class="preprocessor">    ~spin_rw_mutex_v3() {</span>
 <a name="l00076"></a>00076 <span class="preprocessor"></span>        __TBB_ASSERT( !state, <span class="stringliteral">"destruction of an acquired mutex"</span>);
 <a name="l00077"></a>00077     };
 <a name="l00078"></a>00078 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
 <a name="l00079"></a>00079 
 <a name="l00081"></a>00081 
-<a name="l00083"></a><a class="code" href="a00164.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00164.html">scoped_lock</a> : internal::no_copy {
+<a name="l00083"></a><a class="code" href="a00172.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00172.html">scoped_lock</a> : internal::no_copy {
 <a name="l00084"></a>00084     <span class="keyword">public</span>:
 <a name="l00086"></a>00086 
-<a name="l00087"></a><a class="code" href="a00164.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00164.html">scoped_lock</a>() : <a class="code" href="a00142.html">mutex</a>(NULL), is_writer(false) {}
+<a name="l00087"></a><a class="code" href="a00172.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00172.html">scoped_lock</a>() : <a class="code" href="a00150.html">mutex</a>(NULL), is_writer(false) {}
 <a name="l00088"></a>00088 
 <a name="l00090"></a>00090 
-<a name="l00091"></a><a class="code" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">00091</a>         <a class="code" href="a00164.html">scoped_lock</a>( <a class="code" href="a00163.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00142.html">mutex</a>(NULL) {
-<a name="l00092"></a>00092             <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
+<a name="l00091"></a><a class="code" href="a00172.html#42a92d4f8fdde425b111cfa8a9228071">00091</a>         <a class="code" href="a00172.html">scoped_lock</a>( <a class="code" href="a00171.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00150.html">mutex</a>(NULL) {
+<a name="l00092"></a>00092             <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
 <a name="l00093"></a>00093         }
 <a name="l00094"></a>00094 
-<a name="l00096"></a><a class="code" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00096</a>         ~<a class="code" href="a00164.html">scoped_lock</a>() {
-<a name="l00097"></a>00097             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l00096"></a><a class="code" href="a00172.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00096</a>         ~<a class="code" href="a00172.html">scoped_lock</a>() {
+<a name="l00097"></a>00097             <span class="keywordflow">if</span>( <a class="code" href="a00150.html">mutex</a> ) <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
 <a name="l00098"></a>00098         }
 <a name="l00099"></a>00099 
-<a name="l00101"></a><a class="code" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">00101</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00163.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-<a name="l00102"></a>00102             __TBB_ASSERT( !<a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00101"></a><a class="code" href="a00172.html#b0b646ec5be02a127d159bbb7ca65353">00101</a>         <span class="keywordtype">void</span> <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00171.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00102"></a>00102             __TBB_ASSERT( !<a class="code" href="a00150.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
 <a name="l00103"></a>00103             is_writer = write; 
-<a name="l00104"></a>00104             <a class="code" href="a00142.html">mutex</a> = &m;
-<a name="l00105"></a>00105             <span class="keywordflow">if</span>( write ) <a class="code" href="a00142.html">mutex</a>->internal_acquire_writer();
-<a name="l00106"></a>00106             <span class="keywordflow">else</span>        <a class="code" href="a00142.html">mutex</a>->internal_acquire_reader();
+<a name="l00104"></a>00104             <a class="code" href="a00150.html">mutex</a> = &m;
+<a name="l00105"></a>00105             <span class="keywordflow">if</span>( write ) <a class="code" href="a00150.html">mutex</a>->internal_acquire_writer();
+<a name="l00106"></a>00106             <span class="keywordflow">else</span>        <a class="code" href="a00150.html">mutex</a>->internal_acquire_reader();
 <a name="l00107"></a>00107         }
 <a name="l00108"></a>00108 
 <a name="l00110"></a>00110 
-<a name="l00111"></a><a class="code" href="a00164.html#3f0b1e3f2efab63336400348bd070226">00111</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
-<a name="l00112"></a>00112             __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00111"></a><a class="code" href="a00172.html#3f0b1e3f2efab63336400348bd070226">00111</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
+<a name="l00112"></a>00112             __TBB_ASSERT( <a class="code" href="a00150.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
 <a name="l00113"></a>00113             __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
 <a name="l00114"></a>00114             is_writer = <span class="keyword">true</span>; 
-<a name="l00115"></a>00115             <span class="keywordflow">return</span> <a class="code" href="a00142.html">mutex</a>->internal_upgrade();
+<a name="l00115"></a>00115             <span class="keywordflow">return</span> <a class="code" href="a00150.html">mutex</a>->internal_upgrade();
 <a name="l00116"></a>00116         }
 <a name="l00117"></a>00117 
-<a name="l00119"></a><a class="code" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">00119</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00120"></a>00120             __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-<a name="l00121"></a>00121             <a class="code" href="a00163.html">spin_rw_mutex</a> *m = <a class="code" href="a00142.html">mutex</a>; 
-<a name="l00122"></a>00122             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00119"></a><a class="code" href="a00172.html#61b14d00a78185c9b2d206ebfc379124">00119</a>         <span class="keywordtype">void</span> <a class="code" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00120"></a>00120             __TBB_ASSERT( <a class="code" href="a00150.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00121"></a>00121             <a class="code" href="a00171.html">spin_rw_mutex</a> *m = <a class="code" href="a00150.html">mutex</a>; 
+<a name="l00122"></a>00122             <a class="code" href="a00150.html">mutex</a> = NULL;
 <a name="l00123"></a>00123 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00124"></a>00124 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) m->internal_release_writer();
 <a name="l00125"></a>00125             <span class="keywordflow">else</span>            m->internal_release_reader();
 <a name="l00126"></a>00126 <span class="preprocessor">#else</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00163.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
-<a name="l00128"></a>00128             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00163.html#621b900d5fef23d2e401aabcbb777c76">state</a>, -(intptr_t)ONE_READER);
+<a name="l00127"></a>00127 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00171.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
+<a name="l00128"></a>00128             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00171.html#621b900d5fef23d2e401aabcbb777c76">state</a>, -(intptr_t)ONE_READER);
 <a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
 <a name="l00130"></a>00130         }
 <a name="l00131"></a>00131 
-<a name="l00133"></a><a class="code" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">00133</a>         <span class="keywordtype">bool</span> downgrade_to_reader() {
+<a name="l00133"></a><a class="code" href="a00172.html#c2c2c38a08cb9080e87099fac3e5bc94">00133</a>         <span class="keywordtype">bool</span> downgrade_to_reader() {
 <a name="l00134"></a>00134 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span>            __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00135"></a>00135 <span class="preprocessor"></span>            __TBB_ASSERT( <a class="code" href="a00150.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
 <a name="l00136"></a>00136             __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
-<a name="l00137"></a>00137             <a class="code" href="a00142.html">mutex</a>->internal_downgrade();
+<a name="l00137"></a>00137             <a class="code" href="a00150.html">mutex</a>->internal_downgrade();
 <a name="l00138"></a>00138 <span class="preprocessor">#else</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span>            __TBB_FetchAndAddW( &<a class="code" href="a00142.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
+<a name="l00139"></a>00139 <span class="preprocessor"></span>            __TBB_FetchAndAddW( &<a class="code" href="a00150.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
 <a name="l00140"></a>00140 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
 <a name="l00141"></a>00141             is_writer = <span class="keyword">false</span>;
 <a name="l00142"></a>00142 
 <a name="l00143"></a>00143             <span class="keywordflow">return</span> <span class="keyword">true</span>;
 <a name="l00144"></a>00144         }
 <a name="l00145"></a>00145 
-<a name="l00147"></a><a class="code" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">00147</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00163.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-<a name="l00148"></a>00148             __TBB_ASSERT( !<a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00147"></a><a class="code" href="a00172.html#9879626968d9b9a04cd2ec0fb2e84ae1">00147</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00171.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00148"></a>00148             __TBB_ASSERT( !<a class="code" href="a00150.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
 <a name="l00149"></a>00149             <span class="keywordtype">bool</span> result;
 <a name="l00150"></a>00150             is_writer = write; 
 <a name="l00151"></a>00151             result = write? m.internal_try_acquire_writer()
 <a name="l00152"></a>00152                           : m.internal_try_acquire_reader();
 <a name="l00153"></a>00153             <span class="keywordflow">if</span>( result ) 
-<a name="l00154"></a>00154                 <a class="code" href="a00142.html">mutex</a> = &m;
+<a name="l00154"></a>00154                 <a class="code" href="a00150.html">mutex</a> = &m;
 <a name="l00155"></a>00155             <span class="keywordflow">return</span> result;
 <a name="l00156"></a>00156         }
 <a name="l00157"></a>00157 
 <a name="l00158"></a>00158     <span class="keyword">private</span>:
-<a name="l00160"></a>00160         <a class="code" href="a00163.html">spin_rw_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00160"></a>00160         <a class="code" href="a00171.html">spin_rw_mutex</a>* <a class="code" href="a00150.html">mutex</a>;
 <a name="l00161"></a>00161 
 <a name="l00163"></a>00163 
 <a name="l00164"></a>00164         <span class="keywordtype">bool</span> is_writer;
@@ -167,12 +167,12 @@
 <a name="l00171"></a>00171 
 <a name="l00172"></a>00172     <span class="comment">// ISO C++0x compatibility methods</span>
 <a name="l00173"></a>00173 
-<a name="l00175"></a><a class="code" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">00175</a>     <span class="keywordtype">void</span> lock() {internal_acquire_writer();}
+<a name="l00175"></a><a class="code" href="a00171.html#4007d6e1523dbc3c2bb7f889ab789a8a">00175</a>     <span class="keywordtype">void</span> lock() {internal_acquire_writer();}
 <a name="l00176"></a>00176 
 <a name="l00178"></a>00178 
-<a name="l00179"></a><a class="code" href="a00163.html#088bb256be794cc47d3b83791632fdfc">00179</a>     <span class="keywordtype">bool</span> try_lock() {<span class="keywordflow">return</span> internal_try_acquire_writer();}
+<a name="l00179"></a><a class="code" href="a00171.html#088bb256be794cc47d3b83791632fdfc">00179</a>     <span class="keywordtype">bool</span> try_lock() {<span class="keywordflow">return</span> internal_try_acquire_writer();}
 <a name="l00180"></a>00180 
-<a name="l00182"></a><a class="code" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">00182</a>     <span class="keywordtype">void</span> unlock() {
+<a name="l00182"></a><a class="code" href="a00171.html#f9f52ead2098eb5fb12da59d5ae53b55">00182</a>     <span class="keywordtype">void</span> unlock() {
 <a name="l00183"></a>00183 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
 <a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&WRITER ) internal_release_writer();
 <a name="l00185"></a>00185         <span class="keywordflow">else</span>               internal_release_reader();
@@ -184,10 +184,10 @@
 <a name="l00191"></a>00191 
 <a name="l00192"></a>00192     <span class="comment">// Methods for reader locks that resemble ISO C++0x compatibility methods.</span>
 <a name="l00193"></a>00193 
-<a name="l00195"></a><a class="code" href="a00163.html#13f799708ac4ca437a16be202e263e18">00195</a>     <span class="keywordtype">void</span> lock_read() {internal_acquire_reader();}
+<a name="l00195"></a><a class="code" href="a00171.html#13f799708ac4ca437a16be202e263e18">00195</a>     <span class="keywordtype">void</span> lock_read() {internal_acquire_reader();}
 <a name="l00196"></a>00196 
 <a name="l00198"></a>00198 
-<a name="l00199"></a><a class="code" href="a00163.html#b8667415869013f840d976aa406d385a">00199</a>     <span class="keywordtype">bool</span> try_lock_read() {<span class="keywordflow">return</span> internal_try_acquire_reader();}
+<a name="l00199"></a><a class="code" href="a00171.html#b8667415869013f840d976aa406d385a">00199</a>     <span class="keywordtype">bool</span> try_lock_read() {<span class="keywordflow">return</span> internal_try_acquire_reader();}
 <a name="l00200"></a>00200 
 <a name="l00201"></a>00201 <span class="keyword">private</span>:
 <a name="l00202"></a>00202     <span class="keyword">typedef</span> intptr_t state_t;
diff --git a/doc/html/a00367.html b/doc/html/a00367.html
new file mode 100644
index 0000000..61d92ad
--- /dev/null
+++ b/doc/html/a00367.html
@@ -0,0 +1,609 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>task.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">class </span>task;
+<a name="l00030"></a>00030 <span class="keyword">class </span>task_list;
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
+<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00035"></a>00035 
+<a name="l00037"></a>00037 <span class="keyword">namespace </span>internal {
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     <span class="keyword">class </span>scheduler: no_copy {
+<a name="l00040"></a>00040     <span class="keyword">public</span>:
+<a name="l00042"></a>00042         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( task& first, task*& next ) = 0;
+<a name="l00043"></a>00043 
+<a name="l00045"></a>00045         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( task& parent, task* child ) = 0;
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( task& first, task*& next ) = 0;
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
+<a name="l00052"></a>00052         <span class="keyword">virtual</span> ~scheduler() = 0;
+<a name="l00053"></a>00053     };
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057     <span class="keyword">typedef</span> intptr reference_count;
+<a name="l00058"></a>00058 
+<a name="l00060"></a>00060     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>    <span class="keyword">struct </span>context_list_node_t {
+<a name="l00064"></a>00064         context_list_node_t *my_prev,
+<a name="l00065"></a>00065                             *my_next;
+<a name="l00066"></a>00066     };
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
+<a name="l00069"></a>00069         task_group_context& my_context;
+<a name="l00070"></a>00070     <span class="keyword">public</span>:
+<a name="l00071"></a>00071         allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
+<a name="l00072"></a>00072         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00073"></a>00073         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00074"></a>00074     };
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077     <span class="keyword">class </span>allocate_root_proxy: no_assign {
+<a name="l00078"></a>00078     <span class="keyword">public</span>:
+<a name="l00079"></a>00079         <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
+<a name="l00080"></a>00080         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
+<a name="l00081"></a>00081     };
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
+<a name="l00084"></a>00084     <span class="keyword">public</span>:
+<a name="l00085"></a>00085         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00086"></a>00086         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00087"></a>00087     };
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     <span class="keyword">class </span>allocate_child_proxy: no_assign {
+<a name="l00090"></a>00090     <span class="keyword">public</span>:
+<a name="l00091"></a>00091         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00092"></a>00092         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00093"></a>00093     };
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
+<a name="l00096"></a>00096         task& <span class="keyword">self</span>;
+<a name="l00097"></a>00097         task& parent;
+<a name="l00098"></a>00098     <span class="keyword">public</span>:
+<a name="l00099"></a>00099         allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
+<a name="l00100"></a>00100         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00101"></a>00101         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00102"></a>00102     };
+<a name="l00103"></a>00103 
+<a name="l00104"></a>00104     <span class="keyword">class </span>task_group_base;
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107 
+<a name="l00112"></a>00112     <span class="keyword">class </span>task_prefix {
+<a name="l00113"></a>00113     <span class="keyword">private</span>:
+<a name="l00114"></a>00114         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00174.html">tbb::task</a>;
+<a name="l00115"></a>00115         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00176.html">tbb::task_list</a>;
+<a name="l00116"></a>00116         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00117"></a>00117         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00118"></a>00118         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00119"></a>00119         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00120"></a>00120         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00121"></a>00121         <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span>
+<a name="l00128"></a>00128 <span class="preprocessor">        task_group_context  *context;</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00130"></a>00130         
+<a name="l00132"></a>00132 
+<a name="l00137"></a>00137         scheduler* origin;
+<a name="l00138"></a>00138 
+<a name="l00140"></a>00140         scheduler* owner;
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143 
+<a name="l00146"></a>00146         <a class="code" href="a00174.html">tbb::task</a>* parent;
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149 
+<a name="l00153"></a>00153         reference_count ref_count;
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157         <span class="keywordtype">int</span> depth;
+<a name="l00158"></a>00158 
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
+<a name="l00162"></a>00162 
+<a name="l00164"></a>00164 
+<a name="l00169"></a>00169         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171         affinity_id affinity;
+<a name="l00172"></a>00172 
+<a name="l00174"></a>00174         <a class="code" href="a00174.html">tbb::task</a>* next;
+<a name="l00175"></a>00175 
+<a name="l00177"></a>00177         <a class="code" href="a00174.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
+<a name="l00178"></a>00178     };
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180 } <span class="comment">// namespace internal</span>
+<a name="l00182"></a>00182 <span class="comment"></span>
+<a name="l00183"></a>00183 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>
+<a name="l00185"></a>00185 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
+<a name="l00187"></a>00187 <span class="preprocessor">#else</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
+<a name="l00189"></a>00189         <span class="keyword">class </span>tbb_exception_ptr;
+<a name="l00190"></a>00190     }
+<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00192"></a>00192 
+<a name="l00194"></a>00194 
+<a name="l00214"></a><a class="code" href="a00175.html">00214</a> <span class="keyword">class </span><a class="code" href="a00175.html">task_group_context</a> : internal::no_copy
+<a name="l00215"></a>00215 {
+<a name="l00216"></a>00216 <span class="keyword">private</span>:
+<a name="l00217"></a>00217 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00180.html">tbb_exception</a> <a class="code" href="a00180.html">exception_container_type</a>;
+<a name="l00219"></a>00219 <span class="preprocessor">#else</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00181.html">internal::tbb_exception_ptr</a> <a class="code" href="a00180.html">exception_container_type</a>;
+<a name="l00221"></a>00221 <span class="preprocessor">#endif</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span>
+<a name="l00223"></a>00223     <span class="keyword">enum</span> version_traits_word_layout {
+<a name="l00224"></a>00224         traits_offset = 16,
+<a name="l00225"></a>00225         version_mask = 0xFFFF,
+<a name="l00226"></a>00226         traits_mask = 0xFFFFul << traits_offset
+<a name="l00227"></a>00227     };
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="keyword">public</span>:
+<a name="l00230"></a>00230     <span class="keyword">enum</span> kind_type {
+<a name="l00231"></a>00231         isolated,
+<a name="l00232"></a>00232         bound
+<a name="l00233"></a>00233     };
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235     <span class="keyword">enum</span> traits_type {
+<a name="l00236"></a>00236         exact_exception = 0x0001ul << traits_offset,
+<a name="l00237"></a>00237         no_cancellation = 0x0002ul << traits_offset,
+<a name="l00238"></a>00238         concurrent_wait = 0x0004ul << traits_offset,
+<a name="l00239"></a>00239 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span>        default_traits = 0
+<a name="l00241"></a>00241 <span class="preprocessor">#else</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span>        default_traits = exact_exception
+<a name="l00243"></a>00243 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00244"></a>00244     };
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246 <span class="keyword">private</span>:
+<a name="l00247"></a>00247     <span class="keyword">union </span>{
+<a name="l00249"></a>00249         kind_type my_kind;
+<a name="l00250"></a>00250         uintptr_t _my_kind_aligner;
+<a name="l00251"></a>00251     };
+<a name="l00252"></a>00252 
+<a name="l00254"></a>00254     <a class="code" href="a00175.html">task_group_context</a> *my_parent;
+<a name="l00255"></a>00255 
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259     internal::context_list_node_t my_node;
+<a name="l00260"></a>00260 
+<a name="l00262"></a>00262 
+<a name="l00265"></a>00265     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize - 
+<a name="l00266"></a>00266                     2 * <span class="keyword">sizeof</span>(uintptr_t)- <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) - <span class="keyword">sizeof</span>(internal::context_list_node_t)];
+<a name="l00267"></a>00267     
+<a name="l00269"></a>00269     uintptr_t my_cancellation_requested;
+<a name="l00270"></a>00270     
+<a name="l00272"></a>00272 
+<a name="l00275"></a>00275     uintptr_t  my_version_and_traits;
+<a name="l00276"></a>00276 
+<a name="l00278"></a>00278     <a class="code" href="a00180.html">exception_container_type</a> *my_exception;
+<a name="l00279"></a>00279 
+<a name="l00281"></a>00281 
+<a name="l00284"></a>00284     <span class="keywordtype">void</span> *my_owner;
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(intptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)];
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290 <span class="keyword">public</span>:
+<a name="l00292"></a>00292 
+<a name="l00319"></a><a class="code" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">00319</a>     <a class="code" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> ( kind_type relation_with_parent = bound,
+<a name="l00320"></a>00320                          uintptr_t traits = default_traits )
+<a name="l00321"></a>00321         : my_kind(relation_with_parent)
+<a name="l00322"></a>00322         , my_version_and_traits(1 | traits)
+<a name="l00323"></a>00323     {
+<a name="l00324"></a>00324         <a class="code" href="a00175.html#49a55352084fd44b8863d182e839e6dc">init</a>();
+<a name="l00325"></a>00325     }
+<a name="l00326"></a>00326 
+<a name="l00327"></a>00327     __TBB_EXPORTED_METHOD ~<a class="code" href="a00175.html">task_group_context</a> ();
+<a name="l00328"></a>00328 
+<a name="l00330"></a>00330 
+<a name="l00337"></a>00337     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ();
+<a name="l00338"></a>00338 
+<a name="l00340"></a>00340 
+<a name="l00347"></a>00347     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ();
+<a name="l00348"></a>00348 
+<a name="l00350"></a>00350     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () <span class="keyword">const</span>;
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353 
+<a name="l00359"></a>00359     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ();
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361 <span class="keyword">protected</span>:
+<a name="l00363"></a>00363 
+<a name="l00364"></a>00364     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#49a55352084fd44b8863d182e839e6dc">init</a> ();
+<a name="l00365"></a>00365 
+<a name="l00366"></a>00366 <span class="keyword">private</span>:
+<a name="l00367"></a>00367     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00174.html">task</a>;
+<a name="l00368"></a>00368     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00369"></a>00369 
+<a name="l00370"></a>00370     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
+<a name="l00371"></a>00371     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
+<a name="l00372"></a>00372 
+<a name="l00375"></a>00375     <span class="keywordtype">void</span> propagate_cancellation_from_ancestors ();
+<a name="l00376"></a>00376 
+<a name="l00378"></a>00378     <span class="keywordtype">bool</span> is_alive () { 
+<a name="l00379"></a>00379 <span class="preprocessor">#if TBB_USE_DEBUG</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span>        <span class="keywordflow">return</span> my_version_and_traits != 0xDeadBeef;
+<a name="l00381"></a>00381 <span class="preprocessor">#else</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00383"></a>00383 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00384"></a>00384     }
+<a name="l00385"></a>00385 }; <span class="comment">// class task_group_context</span>
+<a name="l00386"></a>00386 
+<a name="l00387"></a>00387 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00388"></a>00388 
+<a name="l00390"></a>00390 
+<a name="l00391"></a><a class="code" href="a00174.html">00391</a> <span class="keyword">class </span><a class="code" href="a00174.html">task</a>: internal::no_copy {
+<a name="l00393"></a>00393     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
+<a name="l00394"></a>00394 
+<a name="l00396"></a>00396     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
+<a name="l00397"></a>00397 
+<a name="l00398"></a>00398 <span class="keyword">protected</span>:
+<a name="l00400"></a><a class="code" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">00400</a>     <a class="code" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>() {prefix().extra_state=1;}
+<a name="l00401"></a>00401 
+<a name="l00402"></a>00402 <span class="keyword">public</span>:
+<a name="l00404"></a><a class="code" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">00404</a>     <span class="keyword">virtual</span> <a class="code" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">~task</a>() {}
+<a name="l00405"></a>00405 
+<a name="l00407"></a>00407     <span class="keyword">virtual</span> <a class="code" href="a00174.html">task</a>* <a class="code" href="a00174.html#22c298cd40937a431a06777423f002f6">execute</a>() = 0;
+<a name="l00408"></a>00408 
+<a name="l00410"></a><a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e">00410</a>     <span class="keyword">enum</span> <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
+<a name="l00412"></a>00412         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>,
+<a name="l00414"></a>00414         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>,
+<a name="l00416"></a>00416         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>,
+<a name="l00418"></a>00418         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>,
+<a name="l00420"></a>00420         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>,
+<a name="l00422"></a>00422         <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
+<a name="l00423"></a>00423     };
+<a name="l00424"></a>00424 
+<a name="l00425"></a>00425     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00426"></a>00426     <span class="comment">// Allocating tasks</span>
+<a name="l00427"></a>00427     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00428"></a>00428 
+<a name="l00430"></a><a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">00430</a>     <span class="keyword">static</span> internal::allocate_root_proxy <a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>() {
+<a name="l00431"></a>00431         <span class="keywordflow">return</span> internal::allocate_root_proxy();
+<a name="l00432"></a>00432     }
+<a name="l00433"></a>00433 
+<a name="l00434"></a>00434 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00436"></a><a class="code" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">00436</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
+<a name="l00437"></a>00437 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
+<a name="l00438"></a>00438     }
+<a name="l00439"></a>00439 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00440"></a>00440 
+<a name="l00442"></a>00442 
+<a name="l00443"></a><a class="code" href="a00174.html#1434c79a5138993269d034008bff7329">00443</a>     internal::allocate_continuation_proxy& allocate_continuation() {
+<a name="l00444"></a>00444         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
+<a name="l00445"></a>00445     }
+<a name="l00446"></a>00446 
+<a name="l00448"></a><a class="code" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">00448</a>     internal::allocate_child_proxy& allocate_child() {
+<a name="l00449"></a>00449         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
+<a name="l00450"></a>00450     }
+<a name="l00451"></a>00451 
+<a name="l00453"></a>00453 
+<a name="l00455"></a><a class="code" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">00455</a>     internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00174.html">task</a>& t ) {
+<a name="l00456"></a>00456         <span class="keywordflow">return</span> internal::allocate_additional_child_of_proxy(*<span class="keyword">this</span>,t);
+<a name="l00457"></a>00457     }
+<a name="l00458"></a>00458 
+<a name="l00460"></a>00460 
+<a name="l00464"></a>00464     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD destroy( <a class="code" href="a00174.html">task</a>& victim );
+<a name="l00465"></a>00465 
+<a name="l00466"></a>00466     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00467"></a>00467     <span class="comment">// Recycling of tasks</span>
+<a name="l00468"></a>00468     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00469"></a>00469 
+<a name="l00471"></a>00471 
+<a name="l00477"></a><a class="code" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">00477</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
+<a name="l00478"></a>00478         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00479"></a>00479         prefix().state = allocated;
+<a name="l00480"></a>00480     }
+<a name="l00481"></a>00481 
+<a name="l00483"></a>00483 
+<a name="l00484"></a><a class="code" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">00484</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
+<a name="l00485"></a>00485         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00486"></a>00486         prefix().state = recycle;
+<a name="l00487"></a>00487     }
+<a name="l00488"></a>00488 
+<a name="l00490"></a><a class="code" href="a00174.html#db399855177438bbc9cc61d508dae8d2">00490</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00174.html">task</a>& new_parent ) {
+<a name="l00491"></a>00491         internal::task_prefix& p = prefix();
+<a name="l00492"></a>00492         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00493"></a>00493         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
+<a name="l00494"></a>00494         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
+<a name="l00495"></a>00495         __TBB_ASSERT( new_parent.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
+<a name="l00496"></a>00496         __TBB_ASSERT( new_parent.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
+<a name="l00497"></a>00497         p.state = allocated;
+<a name="l00498"></a>00498         p.parent = &new_parent;
+<a name="l00499"></a>00499 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00500"></a>00500 <span class="preprocessor"></span>        p.<a class="code" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
+<a name="l00501"></a>00501 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00502"></a>00502     }
+<a name="l00503"></a>00503 
+<a name="l00505"></a>00505 
+<a name="l00506"></a><a class="code" href="a00174.html#4f1be9bbcdb487830dbe298b68d85144">00506</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
+<a name="l00507"></a>00507         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00508"></a>00508         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
+<a name="l00509"></a>00509         prefix().state = reexecute;
+<a name="l00510"></a>00510     }
+<a name="l00511"></a>00511 
+<a name="l00512"></a>00512     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake </span>
+<a name="l00513"></a>00513     <span class="comment">// of backward source compatibility only</span>
+<a name="l00514"></a>00514     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
+<a name="l00515"></a>00515     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
+<a name="l00516"></a>00516     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518 
+<a name="l00519"></a>00519     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00520"></a>00520     <span class="comment">// Spawning and blocking</span>
+<a name="l00521"></a>00521     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00522"></a>00522 
+<a name="l00524"></a><a class="code" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">00524</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
+<a name="l00525"></a>00525 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00526"></a>00526 <span class="preprocessor"></span>        internal_set_ref_count(count);
+<a name="l00527"></a>00527 <span class="preprocessor">#else</span>
+<a name="l00528"></a>00528 <span class="preprocessor"></span>        prefix().ref_count = count;
+<a name="l00529"></a>00529 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00530"></a>00530     }
+<a name="l00531"></a>00531 
+<a name="l00533"></a>00533 
+<a name="l00534"></a><a class="code" href="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">00534</a>     <span class="keywordtype">void</span> increment_ref_count() {
+<a name="l00535"></a>00535         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
+<a name="l00536"></a>00536     }
+<a name="l00537"></a>00537 
+<a name="l00539"></a>00539 
+<a name="l00540"></a><a class="code" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">00540</a>     <span class="keywordtype">int</span> decrement_ref_count() {
+<a name="l00541"></a>00541 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00542"></a>00542 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
+<a name="l00543"></a>00543 <span class="preprocessor">#else</span>
+<a name="l00544"></a>00544 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
+<a name="l00545"></a>00545 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00546"></a>00546     }
+<a name="l00547"></a>00547 
+<a name="l00549"></a>00549 
+<a name="l00553"></a><a class="code" href="a00174.html#f7737143d458f1ed1c0d7da3971d9e6b">00553</a>     <span class="keywordtype">void</span> spawn( <a class="code" href="a00174.html">task</a>& child ) {
+<a name="l00554"></a>00554         prefix().owner->spawn( child, child.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00555"></a>00555     }
+<a name="l00556"></a>00556 
+<a name="l00558"></a>00558     <span class="keywordtype">void</span> spawn( <a class="code" href="a00176.html">task_list</a>& list );
+<a name="l00559"></a>00559 
+<a name="l00561"></a><a class="code" href="a00174.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00561</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00174.html">task</a>& child ) {
+<a name="l00562"></a>00562         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
+<a name="l00563"></a>00563     }
+<a name="l00564"></a>00564 
+<a name="l00566"></a>00566     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00176.html">task_list</a>& list );
+<a name="l00567"></a>00567 
+<a name="l00569"></a>00569 
+<a name="l00571"></a><a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">00571</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00174.html">task</a>& root ) {
+<a name="l00572"></a>00572         root.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00573"></a>00573     }
+<a name="l00574"></a>00574 
+<a name="l00576"></a>00576 
+<a name="l00578"></a>00578     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00176.html">task_list</a>& root_list );
+<a name="l00579"></a>00579 
+<a name="l00581"></a>00581 
+<a name="l00582"></a><a class="code" href="a00174.html#53d2615ad9c38859b4c8080936600283">00582</a>     <span class="keywordtype">void</span> wait_for_all() {
+<a name="l00583"></a>00583         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
+<a name="l00584"></a>00584     }
+<a name="l00585"></a>00585 
+<a name="l00587"></a>00587     <span class="keyword">static</span> <a class="code" href="a00174.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
+<a name="l00588"></a>00588 
+<a name="l00590"></a><a class="code" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">00590</a>     <a class="code" href="a00174.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
+<a name="l00591"></a>00591 
+<a name="l00592"></a>00592 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00594"></a><a class="code" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">00594</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
+<a name="l00595"></a>00595 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>   
+<a name="l00596"></a>00596 
+<a name="l00598"></a><a class="code" href="a00174.html#f9169402702f56bf519448aaf34450aa">00598</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
+<a name="l00599"></a>00599         <span class="keywordflow">return</span> (prefix().extra_state & 0x80)!=0;
+<a name="l00600"></a>00600     }
+<a name="l00601"></a>00601 
+<a name="l00602"></a>00602     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00603"></a>00603     <span class="comment">// Debugging</span>
+<a name="l00604"></a>00604     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00605"></a>00605 
+<a name="l00607"></a><a class="code" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">00607</a>     <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00174.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
+<a name="l00608"></a>00608 
+<a name="l00610"></a><a class="code" href="a00174.html#ad774f55eaec008ae02b236423209ced">00610</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
+<a name="l00611"></a>00611 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00612"></a>00612 <span class="preprocessor"></span>        internal::reference_count ref_count = prefix().ref_count;
+<a name="l00613"></a>00613         __TBB_ASSERT( ref_count==<span class="keywordtype">int</span>(ref_count), <span class="stringliteral">"integer overflow error"</span>);
+<a name="l00614"></a>00614 <span class="preprocessor">#endif</span>
+<a name="l00615"></a>00615 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
+<a name="l00616"></a>00616     }
+<a name="l00617"></a>00617 
+<a name="l00619"></a>00619     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
+<a name="l00620"></a>00620 
+<a name="l00621"></a>00621     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00622"></a>00622     <span class="comment">// Affinity</span>
+<a name="l00623"></a>00623     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00624"></a>00624  
+<a name="l00626"></a>00626 
+<a name="l00627"></a><a class="code" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">00627</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
+<a name="l00628"></a>00628 
+<a name="l00630"></a><a class="code" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">00630</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
+<a name="l00631"></a>00631 
+<a name="l00633"></a><a class="code" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">00633</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
+<a name="l00634"></a>00634 
+<a name="l00636"></a>00636 
+<a name="l00640"></a>00640     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
+<a name="l00641"></a>00641 
+<a name="l00642"></a>00642 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00644"></a>00644 <span class="preprocessor"></span>
+<a name="l00645"></a><a class="code" href="a00174.html#0f3fb4aac549ab642022450a4bd13326">00645</a> <span class="preprocessor">    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }</span>
+<a name="l00646"></a>00646 <span class="preprocessor"></span>
+<a name="l00648"></a><a class="code" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">00648</a>     <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="l00649"></a>00649 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00650"></a>00650 
+<a name="l00651"></a>00651 <span class="keyword">private</span>:
+<a name="l00652"></a>00652     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00176.html">task_list</a>;
+<a name="l00653"></a>00653     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00654"></a>00654     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00655"></a>00655 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00656"></a>00656 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00657"></a>00657 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00658"></a>00658     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00659"></a>00659     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00660"></a>00660     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00661"></a>00661     
+<a name="l00662"></a>00662     <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
+<a name="l00663"></a>00663 
+<a name="l00665"></a>00665 
+<a name="l00666"></a>00666     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
+<a name="l00667"></a>00667         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
+<a name="l00668"></a>00668     }
+<a name="l00669"></a>00669 }; <span class="comment">// class task</span>
+<a name="l00670"></a>00670 
+<a name="l00672"></a>00672 
+<a name="l00673"></a><a class="code" href="a00142.html">00673</a> <span class="keyword">class </span><a class="code" href="a00142.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00174.html">task</a> {
+<a name="l00674"></a>00674     <span class="comment">/*override*/</span> <a class="code" href="a00174.html">task</a>* execute() {
+<a name="l00675"></a>00675         <span class="keywordflow">return</span> NULL;
+<a name="l00676"></a>00676     }
+<a name="l00677"></a>00677 };
+<a name="l00678"></a>00678 
+<a name="l00680"></a>00680 
+<a name="l00682"></a><a class="code" href="a00176.html">00682</a> <span class="keyword">class </span><a class="code" href="a00176.html">task_list</a>: internal::no_copy {
+<a name="l00683"></a>00683 <span class="keyword">private</span>:
+<a name="l00684"></a>00684     <a class="code" href="a00174.html">task</a>* first;
+<a name="l00685"></a>00685     <a class="code" href="a00174.html">task</a>** next_ptr;
+<a name="l00686"></a>00686     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00174.html">task</a>;
+<a name="l00687"></a>00687 <span class="keyword">public</span>:
+<a name="l00689"></a><a class="code" href="a00176.html#416341c2047eaef50417b41eaf7e9de6">00689</a>     <a class="code" href="a00176.html">task_list</a>() : first(NULL), next_ptr(&first) {}
+<a name="l00690"></a>00690 
+<a name="l00692"></a><a class="code" href="a00176.html#6d438f1499a02db1e59c24ab6043e5ba">00692</a>     ~<a class="code" href="a00176.html">task_list</a>() {}
+<a name="l00693"></a>00693 
+<a name="l00695"></a><a class="code" href="a00176.html#f3ac31e092814b90929f81bb30441959">00695</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
+<a name="l00696"></a>00696 
+<a name="l00698"></a><a class="code" href="a00176.html#4cd34756bc4763dafb8c84838a0124ff">00698</a>     <span class="keywordtype">void</span> push_back( <a class="code" href="a00174.html">task</a>& <a class="code" href="a00174.html">task</a> ) {
+<a name="l00699"></a>00699         task.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
+<a name="l00700"></a>00700         *next_ptr = &task;
+<a name="l00701"></a>00701         next_ptr = &task.<a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00702"></a>00702     }
+<a name="l00703"></a>00703 
+<a name="l00705"></a><a class="code" href="a00176.html#5fe85df5ed524418389d34051750347d">00705</a>     <a class="code" href="a00174.html">task</a>& pop_front() {
+<a name="l00706"></a>00706         __TBB_ASSERT( !empty(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
+<a name="l00707"></a>00707         <a class="code" href="a00174.html">task</a>* result = first;
+<a name="l00708"></a>00708         first = result-><a class="code" href="a00174.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00709"></a>00709         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
+<a name="l00710"></a>00710         <span class="keywordflow">return</span> *result;
+<a name="l00711"></a>00711     }
+<a name="l00712"></a>00712 
+<a name="l00714"></a><a class="code" href="a00176.html#fce446ee13e025969945328f3ff59b95">00714</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00715"></a>00715         first=NULL;
+<a name="l00716"></a>00716         next_ptr=&first;
+<a name="l00717"></a>00717     }
+<a name="l00718"></a>00718 };
+<a name="l00719"></a>00719 
+<a name="l00720"></a><a class="code" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">00720</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn( <a class="code" href="a00176.html">task_list</a>& list ) {
+<a name="l00721"></a>00721     <span class="keywordflow">if</span>( <a class="code" href="a00174.html">task</a>* t = list.<a class="code" href="a00176.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00722"></a>00722         prefix().owner->spawn( *t, *list.<a class="code" href="a00176.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00723"></a>00723         list.<a class="code" href="a00176.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00724"></a>00724     }
+<a name="l00725"></a>00725 }
+<a name="l00726"></a>00726 
+<a name="l00727"></a><a class="code" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">00727</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00174.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00176.html">task_list</a>& root_list ) {
+<a name="l00728"></a>00728     <span class="keywordflow">if</span>( <a class="code" href="a00174.html">task</a>* t = root_list.<a class="code" href="a00176.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00729"></a>00729         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00176.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00730"></a>00730         root_list.<a class="code" href="a00176.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00731"></a>00731     }
+<a name="l00732"></a>00732 }
+<a name="l00733"></a>00733 
+<a name="l00734"></a>00734 } <span class="comment">// namespace tbb</span>
+<a name="l00735"></a>00735 
+<a name="l00736"></a>00736 <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& ) {
+<a name="l00737"></a>00737     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
+<a name="l00738"></a>00738 }
+<a name="l00739"></a>00739 
+<a name="l00740"></a>00740 <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& ) {
+<a name="l00741"></a>00741     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
+<a name="l00742"></a>00742 }
+<a name="l00743"></a>00743 
+<a name="l00744"></a>00744 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00745"></a>00745 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_with_context_proxy& p ) {
+<a name="l00746"></a>00746     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00747"></a>00747 }
+<a name="l00748"></a>00748 
+<a name="l00749"></a>00749 <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_with_context_proxy& p ) {
+<a name="l00750"></a>00750     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00751"></a>00751 }
+<a name="l00752"></a>00752 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00753"></a>00753 
+<a name="l00754"></a>00754 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_continuation_proxy& p ) {
+<a name="l00755"></a>00755     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00756"></a>00756 }
+<a name="l00757"></a>00757 
+<a name="l00758"></a>00758 <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_continuation_proxy& p ) {
+<a name="l00759"></a>00759     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00760"></a>00760 }
+<a name="l00761"></a>00761 
+<a name="l00762"></a>00762 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_child_proxy& p ) {
+<a name="l00763"></a>00763     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00764"></a>00764 }
+<a name="l00765"></a>00765 
+<a name="l00766"></a>00766 <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_child_proxy& p ) {
+<a name="l00767"></a>00767     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00768"></a>00768 }
+<a name="l00769"></a>00769 
+<a name="l00770"></a>00770 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_additional_child_of_proxy& p ) {
+<a name="l00771"></a>00771     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00772"></a>00772 }
+<a name="l00773"></a>00773 
+<a name="l00774"></a>00774 <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_additional_child_of_proxy& p ) {
+<a name="l00775"></a>00775     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00776"></a>00776 }
+<a name="l00777"></a>00777 
+<a name="l00778"></a>00778 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_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/a00374.html b/doc/html/a00374.html
deleted file mode 100644
index 3de030a..0000000
--- a/doc/html/a00374.html
+++ /dev/null
@@ -1,90 +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.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>tbb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "blocked_range2d.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "blocked_range3d.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "concurrent_queue.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "concurrent_vector.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "mutex.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "null_mutex.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "null_rw_mutex.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "parallel_do.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "parallel_for.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "parallel_for_each.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "parallel_invoke.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "parallel_reduce.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "parallel_scan.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "parallel_sort.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "pipeline.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "queuing_mutex.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "queuing_rw_mutex.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "recursive_mutex.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "task.h"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "task_group.h"</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include "task_scheduler_init.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include "tick_count.h"</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_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/a00376.html b/doc/html/a00376.html
new file mode 100644
index 0000000..bd12f04
--- /dev/null
+++ b/doc/html/a00376.html
@@ -0,0 +1,266 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task_group.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>task_group.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_group_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_group_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030     <span class="keyword">template</span><<span class="keyword">typename</span> F> <span class="keyword">class </span>task_handle_task;
+<a name="l00031"></a>00031 }
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00034"></a>00034 <span class="keyword">class </span>task_handle {
+<a name="l00035"></a>00035     <span class="keyword">template</span><<span class="keyword">typename</span> _F> <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_handle_task;
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037     <span class="keyword">static</span> <span class="keyword">const</span> intptr_t scheduled = 0x1;
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     F my_func;
+<a name="l00040"></a>00040     intptr_t my_state;
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042     <span class="keywordtype">void</span> mark_scheduled () {
+<a name="l00043"></a>00043         <span class="comment">// The check here is intentionally lax to avoid the impact of interlocked operation</span>
+<a name="l00044"></a>00044         <span class="keywordflow">if</span> ( my_state & scheduled )
+<a name="l00045"></a>00045             internal::throw_exception( internal::eid_invalid_multiple_scheduling );
+<a name="l00046"></a>00046         my_state |= scheduled;
+<a name="l00047"></a>00047     }
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049     <span class="comment">// No assignment operator</span>
+<a name="l00050"></a>00050     <span class="keyword">const</span> task_handle& operator = ( <span class="keyword">const</span> task_handle& );
+<a name="l00051"></a>00051 <span class="keyword">public</span>:
+<a name="l00052"></a>00052     task_handle( <span class="keyword">const</span> F& f ) : my_func(f), my_state(0) {}
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{ my_func(); }
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="keyword">enum</span> task_group_status {
+<a name="l00058"></a>00058     not_complete,
+<a name="l00059"></a>00059     complete,
+<a name="l00060"></a>00060     canceled
+<a name="l00061"></a>00061 };
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063 <span class="keyword">namespace </span>internal {
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
+<a name="l00066"></a>00066 <span class="comment">//#pragma warning(disable: 588)</span>
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00069"></a>00069 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
+<a name="l00070"></a>00070     F my_func;
+<a name="l00071"></a>00071     <span class="comment">/*override*/</span> <a class="code" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00072"></a>00072         my_func();
+<a name="l00073"></a>00073         <span class="keywordflow">return</span> NULL;
+<a name="l00074"></a>00074     }
+<a name="l00075"></a>00075 <span class="keyword">public</span>:
+<a name="l00076"></a>00076     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
+<a name="l00077"></a>00077 };
+<a name="l00078"></a>00078 
+<a name="l00079"></a>00079 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00080"></a>00080 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
+<a name="l00081"></a>00081     task_handle<F>& my_handle;
+<a name="l00082"></a>00082     <span class="comment">/*override*/</span> <a class="code" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00083"></a>00083         my_handle();
+<a name="l00084"></a>00084         <span class="keywordflow">return</span> NULL;
+<a name="l00085"></a>00085     }
+<a name="l00086"></a>00086 <span class="keyword">public</span>:
+<a name="l00087"></a>00087     task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
+<a name="l00088"></a>00088 };
+<a name="l00089"></a>00089 
+<a name="l00090"></a>00090 <span class="keyword">class </span>task_group_base : internal::no_copy {
+<a name="l00091"></a>00091 <span class="keyword">protected</span>:
+<a name="l00092"></a>00092     empty_task* my_root;
+<a name="l00093"></a>00093     task_group_context my_context;
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095     task& owner () { <span class="keywordflow">return</span> *my_root; }
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00098"></a>00098     task_group_status internal_run_and_wait( F& f ) {
+<a name="l00099"></a>00099         <span class="keywordflow">try</span> {
+<a name="l00100"></a>00100             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
+<a name="l00101"></a>00101                 f();
+<a name="l00102"></a>00102         } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00103"></a>00103             my_context.register_pending_exception();
+<a name="l00104"></a>00104         }
+<a name="l00105"></a>00105         <span class="keywordflow">return</span> wait();
+<a name="l00106"></a>00106     }
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108     <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> Task>
+<a name="l00109"></a>00109     <span class="keywordtype">void</span> internal_run( F& f ) {
+<a name="l00110"></a>00110         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
+<a name="l00111"></a>00111     }
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113 <span class="keyword">public</span>:
+<a name="l00114"></a>00114     task_group_base( uintptr_t traits = 0 )
+<a name="l00115"></a>00115         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
+<a name="l00116"></a>00116     {
+<a name="l00117"></a>00117         my_root = <span class="keyword">new</span>( <a class="code" href="a00174.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
+<a name="l00118"></a>00118         my_root->set_ref_count(1);
+<a name="l00119"></a>00119     }
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00122"></a>00122     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00123"></a>00123         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00124"></a>00124     }
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126     task_group_status wait() {
+<a name="l00127"></a>00127         <span class="keywordflow">try</span> {
+<a name="l00128"></a>00128             owner().prefix().owner->wait_for_all( *my_root, NULL );
+<a name="l00129"></a>00129         } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00130"></a>00130             my_context.reset();
+<a name="l00131"></a>00131             <span class="keywordflow">throw</span>;
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
+<a name="l00134"></a>00134             my_context.reset();
+<a name="l00135"></a>00135             <span class="keywordflow">return</span> canceled;
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137         <span class="keywordflow">return</span> complete;
+<a name="l00138"></a>00138     }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     <span class="keywordtype">bool</span> is_canceling() {
+<a name="l00141"></a>00141         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
+<a name="l00142"></a>00142     }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     <span class="keywordtype">void</span> cancel() {
+<a name="l00145"></a>00145         my_context.cancel_group_execution();
+<a name="l00146"></a>00146     }
+<a name="l00147"></a>00147 }; <span class="comment">// class task_group_base</span>
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 } <span class="comment">// namespace internal</span>
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00152"></a>00152 <span class="keyword">public</span>:
+<a name="l00153"></a>00153     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+<a name="l00154"></a>00154 
+<a name="l00155"></a>00155     ~task_group() <span class="keyword">try</span> {
+<a name="l00156"></a>00156         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
+<a name="l00157"></a>00157         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
+<a name="l00158"></a>00158             my_root->wait_for_all();
+<a name="l00159"></a>00159         owner().destroy(*my_root);
+<a name="l00160"></a>00160     }
+<a name="l00161"></a>00161     <span class="keywordflow">catch</span> (...) {
+<a name="l00162"></a>00162         owner().destroy(*my_root);
+<a name="l00163"></a>00163         <span class="keywordflow">throw</span>;
+<a name="l00164"></a>00164     }
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00168"></a>00168     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00169"></a>00169         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00170"></a>00170     }
+<a name="l00171"></a>00171 <span class="preprocessor">#else</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
+<a name="l00173"></a>00173 <span class="preprocessor">#endif</span>
+<a name="l00174"></a>00174 <span class="preprocessor"></span>
+<a name="l00175"></a>00175     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00176"></a>00176     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
+<a name="l00177"></a>00177         internal_run< const F, internal::function_task<F> >( f );
+<a name="l00178"></a>00178     }
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00181"></a>00181     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
+<a name="l00182"></a>00182         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
+<a name="l00183"></a>00183     }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00186"></a>00186     task_group_status run_and_wait( task_handle<F>& h ) {
+<a name="l00187"></a>00187       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00188"></a>00188     }
+<a name="l00189"></a>00189 }; <span class="comment">// class task_group</span>
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00192"></a>00192 <span class="keyword">public</span>:
+<a name="l00193"></a>00193     ~structured_task_group() {
+<a name="l00194"></a>00194         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
+<a name="l00195"></a>00195             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
+<a name="l00196"></a>00196             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
+<a name="l00197"></a>00197             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
+<a name="l00198"></a>00198             <span class="keywordflow">if</span> ( !is_canceling() )
+<a name="l00199"></a>00199                 cancel();
+<a name="l00200"></a>00200             my_root->wait_for_all();
+<a name="l00201"></a>00201             owner().destroy(*my_root);
+<a name="l00202"></a>00202             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
+<a name="l00203"></a>00203                 internal::throw_exception( internal::eid_missing_wait );
+<a name="l00204"></a>00204         }
+<a name="l00205"></a>00205         <span class="keywordflow">else</span> {
+<a name="l00206"></a>00206             <span class="keywordflow">if</span>( my_root->ref_count() == 1 )
+<a name="l00207"></a>00207                 my_root->set_ref_count(0);
+<a name="l00208"></a>00208             owner().destroy(*my_root);
+<a name="l00209"></a>00209         }
+<a name="l00210"></a>00210     }
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00213"></a>00213     task_group_status run_and_wait ( task_handle<F>& h ) {
+<a name="l00214"></a>00214         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00215"></a>00215     }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217     task_group_status wait() {
+<a name="l00218"></a>00218         task_group_status res = task_group_base::wait();
+<a name="l00219"></a>00219         my_root->set_ref_count(1);
+<a name="l00220"></a>00220         <span class="keywordflow">return</span> res;
+<a name="l00221"></a>00221     }
+<a name="l00222"></a>00222 }; <span class="comment">// class structured_task_group</span>
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224 <span class="keyword">inline</span> 
+<a name="l00225"></a>00225 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
+<a name="l00226"></a>00226     <span class="keywordflow">return</span> <a class="code" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="keyword">template</span><<span class="keyword">class</span> F>
+<a name="l00230"></a>00230 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
+<a name="l00231"></a>00231     <span class="keywordflow">return</span> task_handle<F>( f );
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234 } <span class="comment">// namespace tbb</span>
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_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/a00379.html b/doc/html/a00379.html
deleted file mode 100644
index cdfa209..0000000
--- a/doc/html/a00379.html
+++ /dev/null
@@ -1,160 +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_config.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>tbb_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#else</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00070"></a>00070 <span class="preprocessor">#ifndef __TBB_EXCEPTIONS</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXCEPTIONS 1</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#ifndef __TBB_NEW_ITT_NOTIFY</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NEW_ITT_NOTIFY 1</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_NEW_ITT_NOTIFY */</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/* TODO: The following condition should be extended as soon as new compilers/runtimes </span>
-<a name="l00084"></a>00084 <span class="comment">         with std::exception_ptr support appear. */</span>
-<a name="l00085"></a>00085 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__GNUC__==4 && __GNUC_MINOR__>=4))</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00095"></a>00095 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span>
-<a name="l00104"></a>00104 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span>
-<a name="l00107"></a>00107 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEFAULT_PARTITIONER */</span>
-<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
-<a name="l00110"></a>00110 
-<a name="l00113"></a>00113 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__==4 && !defined(__INTEL_COMPILER)</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 1</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00123"></a>00123 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 0x1500 && !defined(__INTEL_COMPILER)</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00126"></a>00126 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 <span class="preprocessor">#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>
-<a name="l00131"></a>00131 <span class="preprocessor">    #define __TBB_EXCEPTION_HANDLING_BROKEN 1</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span>
-<a name="l00136"></a>00136 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00139"></a>00139 <span class="preprocessor">#if __FreeBSD__</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span>
-<a name="l00142"></a>00142 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00146"></a>00146 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="preprocessor">#if __LRB__</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_config_lrb.h"</span>
-<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span>
-<a name="l00153"></a>00153 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_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/a00381.html b/doc/html/a00381.html
deleted file mode 100644
index 73ec534..0000000
--- a/doc/html/a00381.html
+++ /dev/null
@@ -1,262 +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_exception.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>tbb_exception.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
-<a name="l00003"></a>00003 <span class="comment"></span>
-<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
-<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
-<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
-<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
-<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
-<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
-<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
-<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
-<a name="l00012"></a>00012 <span class="comment"></span>
-<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
-<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
-<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
-<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
-<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
-<a name="l00018"></a>00018 <span class="comment">    writing.</span>
-<a name="l00019"></a>00019 <span class="comment">*/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_exception_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_exception_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <stdexcept></span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#if __TBB_EXCEPTIONS && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#error The current compilation environment does not support exception handling. Please set __TBB_EXCEPTIONS to 0 in tbb_config.h</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
-<a name="l00032"></a>00032 
-<a name="l00034"></a><a class="code" href="a00121.html">00034</a> <span class="keyword">class </span><a class="code" href="a00121.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
-<a name="l00035"></a>00035 <span class="keyword">public</span>:
-<a name="l00036"></a>00036     <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>; }
-<a name="l00037"></a>00037     <span class="keyword">virtual</span> ~<a class="code" href="a00121.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00038"></a>00038 };
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>internal {
-<a name="l00041"></a>00041 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4() ;
-<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 } <span class="comment">// namespace tbb</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <exception></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <typeinfo></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <new></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">namespace </span>tbb {
-<a name="l00053"></a>00053 
-<a name="l00055"></a>00055 
-<a name="l00075"></a><a class="code" href="a00172.html">00075</a> <span class="keyword">class </span><a class="code" href="a00172.html">tbb_exception</a> : <span class="keyword">public</span> std::exception
-<a name="l00076"></a>00076 {
-<a name="l00080"></a>00080     <span class="keywordtype">void</span>* operator new ( size_t );
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keyword">public</span>:
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     <span class="keyword">virtual</span> <a class="code" href="a00172.html">tbb_exception</a>* <a class="code" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00086"></a>00086     
-<a name="l00088"></a>00088 
-<a name="l00090"></a>00090     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00091"></a>00091 
-<a name="l00093"></a>00093 
-<a name="l00097"></a>00097     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 0;
-<a name="l00098"></a>00098 
-<a name="l00100"></a>00100     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00101"></a>00101 
-<a name="l00103"></a>00103     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00104"></a>00104 
-<a name="l00111"></a><a class="code" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">00111</a>     <span class="keywordtype">void</span> <a class="code" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete </a>( <span class="keywordtype">void</span>* p ) {
-<a name="l00112"></a>00112         internal::deallocate_via_handler_v3(p);
-<a name="l00113"></a>00113     }
-<a name="l00114"></a>00114 };
-<a name="l00115"></a>00115 
-<a name="l00117"></a>00117 
-<a name="l00121"></a><a class="code" href="a00127.html">00121</a> <span class="keyword">class </span><a class="code" href="a00127.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00172.html">tbb_exception</a>
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123 <span class="keyword">public</span>:
-<a name="l00124"></a>00124     <a class="code" href="a00127.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>& src )
-<a name="l00125"></a>00125         : <a class="code" href="a00172.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
-<a name="l00126"></a>00126     {
-<a name="l00127"></a>00127         set(src.<a class="code" href="a00127.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00127.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00128"></a>00128     }
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130     <a class="code" href="a00127.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
-<a name="l00131"></a>00131         : my_dynamic(<span class="keyword">false</span>)
-<a name="l00132"></a>00132     {
-<a name="l00133"></a>00133         set(name, info);
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     __TBB_EXPORTED_METHOD ~<a class="code" href="a00127.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
-<a name="l00137"></a>00137         clear();
-<a name="l00138"></a>00138     }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     <a class="code" href="a00127.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>& src ) {
-<a name="l00141"></a>00141         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00142"></a>00142             clear();
-<a name="l00143"></a>00143             set(src.<a class="code" href="a00127.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00127.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00144"></a>00144         }
-<a name="l00145"></a>00145         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00146"></a>00146     }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="comment">/*override*/</span> 
-<a name="l00149"></a>00149     <a class="code" href="a00127.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#837a50b8f6a800bda225c39d1699643f">move</a> () <span class="keywordflow">throw</span>();
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">/*override*/</span> 
-<a name="l00152"></a>00152     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#93d875d3555502ff6f18513525de204c">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="comment">/*override*/</span> 
-<a name="l00155"></a><a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">00155</a>     <span class="keywordtype">void</span> <a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { <span class="keywordflow">throw</span> *<span class="keyword">this</span>; }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="comment">/*override*/</span> 
-<a name="l00158"></a>00158     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">/*override*/</span> 
-<a name="l00161"></a>00161     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set ( const <span class="keywordtype">char</span>* name, const <span class="keywordtype">char</span>* info ) throw();
-<a name="l00164"></a>00164     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear () throw();
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 private:
-<a name="l00168"></a>00168     <a class="code" href="a00127.html">captured_exception</a>() {}
-<a name="l00169"></a>00169 
-<a name="l00171"></a>00171     <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 );
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00174"></a>00174     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00175"></a>00175     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_info;
-<a name="l00176"></a>00176 };
-<a name="l00177"></a>00177 
-<a name="l00179"></a>00179 
-<a name="l00183"></a>00183 <span class="keyword">template</span><<span class="keyword">typename</span> ExceptionData>
-<a name="l00184"></a><a class="code" href="a00141.html">00184</a> <span class="keyword">class </span><a class="code" href="a00141.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00172.html">tbb_exception</a>
-<a name="l00185"></a>00185 {
-<a name="l00186"></a>00186     <span class="keyword">typedef</span> <a class="code" href="a00141.html">movable_exception<ExceptionData></a> <a class="code" href="a00141.html">self_type</a>;
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="keyword">public</span>:
-<a name="l00189"></a>00189     <a class="code" href="a00141.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data ) 
-<a name="l00190"></a>00190         : <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(data)
-<a name="l00191"></a>00191         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00192"></a>00192         , my_exception_name(<span class="keyword">typeid</span>(<a class="code" href="a00141.html">self_type</a>).<a class="code" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>())
-<a name="l00193"></a>00193     {}
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <a class="code" href="a00141.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> () 
-<a name="l00196"></a>00196         : <a class="code" href="a00172.html">tbb_exception</a>(src)
-<a name="l00197"></a>00197         , <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
-<a name="l00198"></a>00198         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00199"></a>00199         , my_exception_name(src.<a class="code" href="a00141.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
-<a name="l00200"></a>00200     {}
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     ~<a class="code" href="a00141.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>& src ) {
-<a name="l00205"></a>00205         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00206"></a>00206             <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00207"></a>00207             my_exception_name = src.<a class="code" href="a00141.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
-<a name="l00208"></a>00208         }
-<a name="l00209"></a>00209         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00210"></a>00210     }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214     <span class="keyword">const</span> ExceptionData& data () <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00215"></a>00215 
-<a name="l00216"></a><a class="code" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">00216</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
-<a name="l00217"></a>00217 
-<a name="l00218"></a><a class="code" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">00218</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="comment">/*override*/</span> 
-<a name="l00221"></a><a class="code" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">00221</a>     <a class="code" href="a00141.html">movable_exception</a>* <a class="code" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> () throw() {
-<a name="l00222"></a>00222         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00141.html">movable_exception</a>));
-<a name="l00223"></a>00223         <span class="keywordflow">if</span> ( e ) {
-<a name="l00224"></a>00224             ::new (e) movable_exception(*<span class="keyword">this</span>);
-<a name="l00225"></a>00225             ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
-<a name="l00226"></a>00226         }
-<a name="l00227"></a>00227         <span class="keywordflow">return</span> (movable_exception*)e;
-<a name="l00228"></a>00228     }
-<a name="l00229"></a>00229     <span class="comment">/*override*/</span> 
-<a name="l00230"></a><a class="code" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">00230</a>     <span class="keywordtype">void</span> <a class="code" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> () throw() {
-<a name="l00231"></a>00231         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
-<a name="l00232"></a>00232         <span class="keywordflow">if</span> ( my_dynamic ) {
-<a name="l00233"></a>00233             this->~<a class="code" href="a00141.html">movable_exception</a>();
-<a name="l00234"></a>00234             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
-<a name="l00235"></a>00235         }
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237     <span class="comment">/*override*/</span> 
-<a name="l00238"></a><a class="code" href="a00141.html#17cffba35811c92b7e65d63506b69602">00238</a>     <span class="keywordtype">void</span> <a class="code" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</a> () {
-<a name="l00239"></a>00239         <span class="keywordflow">throw</span> *<span class="keyword">this</span>;
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="keyword">protected</span>:
-<a name="l00244"></a><a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">00244</a>     ExceptionData  <a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246 <span class="keyword">private</span>:
-<a name="l00248"></a>00248     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00253"></a>00253 };
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
-<a name="l00257"></a>00257 
-<a name="l00259"></a>00259 
-<a name="l00261"></a><a class="code" href="a00173.html">00261</a> <span class="keyword">class </span><a class="code" href="a00173.html">tbb_exception_ptr</a> {
-<a name="l00262"></a>00262     std::exception_ptr  my_ptr;
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="keyword">public</span>:
-<a name="l00265"></a>00265     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ();
-<a name="l00266"></a>00266     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00172.html">tbb_exception</a>& tag );
-<a name="l00268"></a>00268     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00127.html">captured_exception</a>& src );
-<a name="l00269"></a>00269     
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272     <span class="keywordtype">void</span> <a class="code" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00273"></a>00273 
-<a name="l00275"></a><a class="code" href="a00173.html#292832fd5c523e3d8081a22247840a1d">00275</a>     <span class="keywordtype">void</span> <a class="code" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> () { std::rethrow_exception(my_ptr); }
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="keyword">private</span>:
-<a name="l00278"></a>00278     <a class="code" href="a00173.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr& src ) : my_ptr(src) {}
-<a name="l00279"></a>00279     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>& src ) : my_ptr(std::copy_exception(src)) {}
-<a name="l00280"></a>00280 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 } <span class="comment">// namespace internal</span>
-<a name="l00283"></a>00283 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 } <span class="comment">// namespace tbb</span>
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_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/a00371.html b/doc/html/a00383.html
similarity index 83%
rename from doc/html/a00371.html
rename to doc/html/a00383.html
index c63fa9c..2c083b4 100644
--- a/doc/html/a00371.html
+++ b/doc/html/a00383.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>task_scheduler_init.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -54,35 +54,35 @@
 <a name="l00035"></a>00035 } <span class="comment">// namespace internal</span>
 <a name="l00037"></a>00037 <span class="comment"></span>
 <a name="l00039"></a>00039 
-<a name="l00042"></a><a class="code" href="a00169.html">00042</a> <span class="keyword">class </span><a class="code" href="a00169.html">task_scheduler_init</a>: internal::no_copy {
+<a name="l00042"></a><a class="code" href="a00177.html">00042</a> <span class="keyword">class </span><a class="code" href="a00177.html">task_scheduler_init</a>: internal::no_copy {
 <a name="l00044"></a>00044     internal::scheduler* my_scheduler;
 <a name="l00045"></a>00045 <span class="keyword">public</span>:
 <a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">00048</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
+<a name="l00048"></a><a class="code" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">00048</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
 <a name="l00049"></a>00049 
-<a name="l00051"></a><a class="code" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">00051</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
+<a name="l00051"></a><a class="code" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">00051</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
 <a name="l00052"></a>00052 
 <a name="l00054"></a>00054 
-<a name="l00062"></a>00062     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
+<a name="l00062"></a>00062     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00177.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
 <a name="l00063"></a>00063 
 <a name="l00065"></a>00065 
-<a name="l00066"></a>00066     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
+<a name="l00066"></a>00066     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00177.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
 <a name="l00067"></a>00067 
-<a name="l00069"></a>00069     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00069"></a>00069     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
 <a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">00072</a>     <a class="code" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
-<a name="l00073"></a>00073         <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
+<a name="l00072"></a><a class="code" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">00072</a>     <a class="code" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+<a name="l00073"></a>00073         <a class="code" href="a00177.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
 <a name="l00074"></a>00074     }
 <a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">00077</a>     <a class="code" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
+<a name="l00077"></a><a class="code" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">00077</a>     <a class="code" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
 <a name="l00078"></a>00078         <span class="keywordflow">if</span>( my_scheduler ) 
-<a name="l00079"></a>00079             <a class="code" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00079"></a>00079             <a class="code" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
 <a name="l00080"></a>00080         internal::poison_pointer( my_scheduler );
 <a name="l00081"></a>00081     }
 <a name="l00083"></a>00083 
-<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
+<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00177.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
 <a name="l00091"></a>00091 
-<a name="l00093"></a><a class="code" href="a00169.html#12752282977029f23416642bc03e8b74">00093</a>     <span class="keywordtype">bool</span> <a class="code" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
+<a name="l00093"></a><a class="code" href="a00177.html#12752282977029f23416642bc03e8b74">00093</a>     <span class="keywordtype">bool</span> <a class="code" href="a00177.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
 <a name="l00094"></a>00094 };
 <a name="l00095"></a>00095 
 <a name="l00096"></a>00096 } <span class="comment">// namespace tbb</span>
diff --git a/doc/html/a00372.html b/doc/html/a00384.html
similarity index 99%
rename from doc/html/a00372.html
rename to doc/html/a00384.html
index 87886d1..7663ef7 100644
--- a/doc/html/a00372.html
+++ b/doc/html/a00384.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>task_scheduler_observer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
diff --git a/doc/html/a00386.html b/doc/html/a00386.html
index d064ee1..cd613d2 100644
--- a/doc/html/a00386.html
+++ b/doc/html/a00386.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_stddef.h Source File</title>
+<title>tbb.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>tbb_stddef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>tbb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,185 +39,47 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_stddef_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_stddef_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="comment">// Marketing-driven product version</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#define TBB_VERSION_MAJOR 2</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 2</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00028"></a>00028 <span class="comment">// Engineering-focused interface version</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 4001</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">// The oldest major interface version still supported</span>
-<a name="l00033"></a>00033 <span class="comment">// To be used in SONAME, manifests, etc.</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#define TBB_COMPATIBLE_INTERFACE_VERSION 2</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="comment">// We do not need defines below for resource processing on windows</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#if !defined RC_INVOKED</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="comment">// Define groups for Doxygen documentation</span>
-<a name="l00052"></a>00052 <span class="comment"></span><span class="comment">// Simple text that is displayed on the main page of Doxygen documentation.</span>
-<a name="l00094"></a>00094 <span class="comment"></span><span class="comment">// Define preprocessor symbols used to determine architecture</span>
-<a name="l00095"></a>00095 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#   if defined(_M_AMD64)</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IA64)</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* Assume generic Unix */</span>
-<a name="l00104"></a>00104 <span class="preprocessor">#   if !__linux__ && !__APPLE__</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_os 1</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#   if __x86_64__</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#   elif __ia64__</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#   elif __i386__||__i386  // __i386 is for Sun OS</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#   else</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_arch 1</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>
-<a name="l00118"></a>00118 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal</span>
-<a name="l00120"></a>00120 <span class="keyword">namespace </span>tbb {
-<a name="l00121"></a>00121 <span class="keyword">namespace </span>internal {
-<a name="l00122"></a>00122     <span class="keyword">typedef</span> __int8 int8_t;
-<a name="l00123"></a>00123     <span class="keyword">typedef</span> __int16 int16_t;
-<a name="l00124"></a>00124     <span class="keyword">typedef</span> __int32 int32_t;
-<a name="l00125"></a>00125     <span class="keyword">typedef</span> __int64 int64_t;
-<a name="l00126"></a>00126     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
-<a name="l00127"></a>00127     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
-<a name="l00128"></a>00128     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
-<a name="l00129"></a>00129     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
-<a name="l00130"></a>00130 } <span class="comment">// namespace internal</span>
-<a name="l00131"></a>00131 } <span class="comment">// namespace tbb</span>
-<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="preprocessor">#if _MSC_VER >=1400</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD __thiscall</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD</span>
-<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#include <cstddef></span>      <span class="comment">/* Need size_t and ptrdiff_t (the latter on Windows only) from here. */</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
-<a name="l00149"></a>00149 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>
-<a name="l00152"></a>00152 <span class="preprocessor">#include "tbb_config.h"</span>
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 <span class="keyword">namespace </span>tbb {
-<a name="l00156"></a><a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">00156</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a>)( <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> < [...]
-<a name="l00157"></a>00157 }
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>
-<a name="l00162"></a>00162 
-<a name="l00165"></a>00165 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>
-<a name="l00168"></a>00168 <span class="keyword">namespace </span>tbb {
-<a name="l00170"></a>00170     <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
-<a name="l00171"></a>00171 
-<a name="l00173"></a>00173 
-<a name="l00176"></a>00176     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a>( <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 );
-<a name="l00177"></a>00177 } <span class="comment">// namespace tbb</span>
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="preprocessor">#else</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00182"></a>00182 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
-<a name="l00184"></a>00184 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span>
-<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00187"></a>00187 
-<a name="l00189"></a>00189 <span class="keyword">namespace </span>tbb {
-<a name="l00190"></a>00190 
-<a name="l00192"></a>00192 
-<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
-<a name="l00197"></a>00197 
-<a name="l00199"></a>00199 
-<a name="l00203"></a><a class="code" href="a00165.html">00203</a> <span class="keyword">class </span><a class="code" href="a00165.html">split</a> {
-<a name="l00204"></a>00204 };
-<a name="l00205"></a>00205 
-<a name="l00210"></a>00210 <span class="keyword">namespace </span>internal {
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="keyword">using</span> std::size_t;
-<a name="l00213"></a>00213 
-<a name="l00215"></a>00215 
-<a name="l00217"></a>00217 <span class="keyword">typedef</span> size_t uintptr;
-<a name="l00218"></a>00218 
-<a name="l00220"></a>00220 
-<a name="l00222"></a>00222 <span class="keyword">typedef</span> std::ptrdiff_t intptr;
-<a name="l00223"></a>00223 
-<a name="l00225"></a>00225 
-<a name="l00228"></a>00228 <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
-<a name="l00229"></a>00229 
-<a name="l00231"></a>00231 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00235"></a>00235 <span class="preprocessor">template<typename T></span>
-<a name="l00236"></a>00236 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* & p ) {
-<a name="l00237"></a>00237     p = reinterpret_cast<T*>(-1);
-<a name="l00238"></a>00238 }
-<a name="l00239"></a>00239 <span class="preprocessor">#else</span>
-<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00241"></a>00241 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
-<a name="l00242"></a>00242 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00243"></a>00243 
-<a name="l00245"></a>00245 <span class="keyword">class </span>no_assign {
-<a name="l00246"></a>00246     <span class="comment">// Deny assignment</span>
-<a name="l00247"></a>00247     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
-<a name="l00248"></a>00248 <span class="keyword">public</span>:
-<a name="l00249"></a>00249 <span class="preprocessor">#if __GNUC__</span>
-<a name="l00251"></a>00251 <span class="preprocessor">    no_assign() {}</span>
-<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00253"></a>00253 };
-<a name="l00254"></a>00254 
-<a name="l00256"></a>00256 <span class="keyword">class </span>no_copy: no_assign {
-<a name="l00258"></a>00258     no_copy( <span class="keyword">const</span> no_copy& );
-<a name="l00259"></a>00259 <span class="keyword">public</span>:
-<a name="l00261"></a>00261     no_copy() {}
-<a name="l00262"></a>00262 };
-<a name="l00263"></a>00263 
-<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00266"></a>00266 <span class="keyword">struct </span>allocator_type {
-<a name="l00267"></a>00267     <span class="keyword">typedef</span> T value_type;
-<a name="l00268"></a>00268 };
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00272"></a>00272 <span class="preprocessor">template<typename T></span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
-<a name="l00274"></a>00274     <span class="keyword">typedef</span> T value_type;
-<a name="l00275"></a>00275 };
-<a name="l00276"></a>00276 <span class="preprocessor">#endif</span>
-<a name="l00277"></a>00277 <span class="preprocessor"></span>
-<a name="l00278"></a>00278 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00281"></a>00281 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 <span class="keyword">typedef</span> version_tag_v3 version_tag;
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 } <span class="comment">// internal</span>
-<a name="l00287"></a>00287 <span class="comment"></span>
-<a name="l00288"></a>00288 } <span class="comment">// tbb</span>
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-<a name="l00291"></a>00291 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "blocked_range2d.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "blocked_range3d.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "concurrent_queue.h"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "critical_section.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "mutex.h"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "null_mutex.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "null_rw_mutex.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "parallel_do.h"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "parallel_for.h"</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include "parallel_for_each.h"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "parallel_invoke.h"</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "parallel_reduce.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "parallel_scan.h"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "parallel_sort.h"</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include "pipeline.h"</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "queuing_mutex.h"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include "queuing_rw_mutex.h"</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include "recursive_mutex.h"</span>
+<a name="l00058"></a>00058 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "task.h"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "task_group.h"</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#include "task_scheduler_init.h"</span>
+<a name="l00063"></a>00063 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00067"></a>00067 <span class="preprocessor">#include "tick_count.h"</span>
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00375.html b/doc/html/a00387.html
similarity index 87%
rename from doc/html/a00375.html
rename to doc/html/a00387.html
index 051ae73..2217bed 100644
--- a/doc/html/a00375.html
+++ b/doc/html/a00387.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_allocator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -67,7 +67,7 @@
 <a name="l00051"></a>00051 <span class="preprocessor"></span>
 <a name="l00053"></a>00053 
 <a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00059"></a><a class="code" href="a00170.html">00059</a> <span class="keyword">class </span><a class="code" href="a00170.html">tbb_allocator</a> {
+<a name="l00059"></a><a class="code" href="a00178.html">00059</a> <span class="keyword">class </span><a class="code" href="a00178.html">tbb_allocator</a> {
 <a name="l00060"></a>00060 <span class="keyword">public</span>:
 <a name="l00061"></a>00061     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
 <a name="l00062"></a>00062     <span class="keyword">typedef</span> value_type* pointer;
@@ -77,39 +77,39 @@
 <a name="l00066"></a>00066     <span class="keyword">typedef</span> size_t size_type;
 <a name="l00067"></a>00067     <span class="keyword">typedef</span> ptrdiff_t difference_type;
 <a name="l00068"></a>00068     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00069"></a>00069         <span class="keyword">typedef</span> <a class="code" href="a00170.html">tbb_allocator<U></a> other;
+<a name="l00069"></a>00069         <span class="keyword">typedef</span> <a class="code" href="a00178.html">tbb_allocator<U></a> other;
 <a name="l00070"></a>00070     };
 <a name="l00071"></a>00071 
-<a name="l00073"></a><a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">00073</a>     <span class="keyword">enum</span> <a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> {
+<a name="l00073"></a><a class="code" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">00073</a>     <span class="keyword">enum</span> <a class="code" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> {
 <a name="l00074"></a>00074         scalable, 
 <a name="l00075"></a>00075         standard
 <a name="l00076"></a>00076     };
 <a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <a class="code" href="a00170.html">tbb_allocator</a>() throw() {}
+<a name="l00078"></a>00078     <a class="code" href="a00178.html">tbb_allocator</a>() throw() {}
 <a name="l00079"></a>00079     tbb_allocator( <span class="keyword">const</span> tbb_allocator& ) throw() {}
 <a name="l00080"></a>00080     <span class="keyword">template</span><<span class="keyword">typename</span> U> tbb_allocator(<span class="keyword">const</span> tbb_allocator<U>&) throw() {}
 <a name="l00081"></a>00081 
 <a name="l00082"></a>00082     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00083"></a>00083     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
 <a name="l00084"></a>00084     
-<a name="l00086"></a><a class="code" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">00086</a>     pointer <a class="code" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
+<a name="l00086"></a><a class="code" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">00086</a>     pointer <a class="code" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
 <a name="l00087"></a>00087         <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(value_type) ));
 <a name="l00088"></a>00088     }
 <a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00091</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>( pointer p, size_type ) {
+<a name="l00091"></a><a class="code" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00091</a>     <span class="keywordtype">void</span> <a class="code" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>( pointer p, size_type ) {
 <a name="l00092"></a>00092         internal::deallocate_via_handler_v3(p);        
 <a name="l00093"></a>00093     }
 <a name="l00094"></a>00094 
-<a name="l00096"></a><a class="code" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">00096</a>     size_type <a class="code" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const throw() {
+<a name="l00096"></a><a class="code" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">00096</a>     size_type <a class="code" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const throw() {
 <a name="l00097"></a>00097         size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
 <a name="l00098"></a>00098         <span class="keywordflow">return</span> (max > 0 ? max : 1);
 <a name="l00099"></a>00099     }
 <a name="l00100"></a>00100     
-<a name="l00102"></a><a class="code" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) value_type(value);}
+<a name="l00102"></a><a class="code" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
 <a name="l00103"></a>00103 
-<a name="l00105"></a><a class="code" href="a00170.html#ef133522bf55f05a605bee0763208281">00105</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p->~value_type();}
+<a name="l00105"></a><a class="code" href="a00178.html#ef133522bf55f05a605bee0763208281">00105</a>     <span class="keywordtype">void</span> <a class="code" href="a00178.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p->~value_type();}
 <a name="l00106"></a>00106 
-<a name="l00108"></a><a class="code" href="a00170.html#78701e7454ef8e1a25b5acd364367080">00108</a>     <span class="keyword">static</span> <a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>() {
+<a name="l00108"></a><a class="code" href="a00178.html#78701e7454ef8e1a25b5acd364367080">00108</a>     <span class="keyword">static</span> <a class="code" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00178.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>() {
 <a name="l00109"></a>00109         <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
 <a name="l00110"></a>00110     }
 <a name="l00111"></a>00111 };
@@ -120,25 +120,25 @@
 <a name="l00116"></a>00116 <span class="preprocessor"></span>
 <a name="l00118"></a>00118 
 <a name="l00119"></a>00119 <span class="keyword">template</span><> 
-<a name="l00120"></a><a class="code" href="a00171.html">00120</a> <span class="keyword">class </span><a class="code" href="a00170.html">tbb_allocator</a><void> {
+<a name="l00120"></a><a class="code" href="a00179.html">00120</a> <span class="keyword">class </span><a class="code" href="a00178.html">tbb_allocator</a><void> {
 <a name="l00121"></a>00121 <span class="keyword">public</span>:
 <a name="l00122"></a>00122     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
 <a name="l00123"></a>00123     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
 <a name="l00124"></a>00124     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
 <a name="l00125"></a>00125     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00126"></a>00126         <span class="keyword">typedef</span> <a class="code" href="a00170.html">tbb_allocator<U></a> other;
+<a name="l00126"></a>00126         <span class="keyword">typedef</span> <a class="code" href="a00178.html">tbb_allocator<U></a> other;
 <a name="l00127"></a>00127     };
 <a name="l00128"></a>00128 };
 <a name="l00129"></a>00129 
 <a name="l00130"></a>00130 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00131"></a>00131 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00170.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00170.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00131"></a>00131 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00178.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00178.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
 <a name="l00132"></a>00132 
 <a name="l00133"></a>00133 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
 <a name="l00134"></a>00134 <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>;}
 <a name="l00135"></a>00135 
 <a name="l00137"></a>00137 
 <a name="l00142"></a>00142 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span><<span class="keyword">typename</span> X> <span class="keyword">class </span>Allocator = tbb_allocator>
-<a name="l00143"></a><a class="code" href="a00179.html">00143</a> <span class="keyword">class </span><a class="code" href="a00179.html">zero_allocator</a> : <span class="keyword">public</span> Allocator<T>
+<a name="l00143"></a><a class="code" href="a00186.html">00143</a> <span class="keyword">class </span><a class="code" href="a00186.html">zero_allocator</a> : <span class="keyword">public</span> Allocator<T>
 <a name="l00144"></a>00144 {
 <a name="l00145"></a>00145 <span class="keyword">public</span>:
 <a name="l00146"></a>00146     <span class="keyword">typedef</span> Allocator<T> base_allocator_type;
@@ -150,13 +150,13 @@
 <a name="l00152"></a>00152     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::size_type size_type;
 <a name="l00153"></a>00153     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::difference_type difference_type;
 <a name="l00154"></a>00154     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00155"></a>00155         <span class="keyword">typedef</span> <a class="code" href="a00179.html">zero_allocator<U, Allocator></a> other;
+<a name="l00155"></a>00155         <span class="keyword">typedef</span> <a class="code" href="a00186.html">zero_allocator<U, Allocator></a> other;
 <a name="l00156"></a>00156     };
 <a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <a class="code" href="a00179.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
-<a name="l00159"></a>00159     <a class="code" href="a00179.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator</a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( a ) { }
+<a name="l00158"></a>00158     <a class="code" href="a00186.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
+<a name="l00159"></a>00159     <a class="code" href="a00186.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00186.html">zero_allocator</a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( a ) { }
 <a name="l00160"></a>00160     <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00161"></a>00161     <a class="code" href="a00179.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator<U></a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( Allocator<U>( a ) ) { }
+<a name="l00161"></a>00161     <a class="code" href="a00186.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00186.html">zero_allocator<U></a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( Allocator<U>( a ) ) { }
 <a name="l00162"></a>00162 
 <a name="l00163"></a>00163     pointer allocate(<span class="keyword">const</span> size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span> *hint = 0 ) {
 <a name="l00164"></a>00164         pointer ptr = base_allocator_type::allocate( n, hint );
@@ -167,19 +167,19 @@
 <a name="l00169"></a>00169 
 <a name="l00171"></a>00171 
 <a name="l00172"></a>00172 <span class="keyword">template</span><<span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>Allocator> 
-<a name="l00173"></a><a class="code" href="a00180.html">00173</a> <span class="keyword">class </span><a class="code" href="a00179.html">zero_allocator</a><void, Allocator> : <span class="keyword">public</span> Allocator<void> {
+<a name="l00173"></a><a class="code" href="a00187.html">00173</a> <span class="keyword">class </span><a class="code" href="a00186.html">zero_allocator</a><void, Allocator> : <span class="keyword">public</span> Allocator<void> {
 <a name="l00174"></a>00174 <span class="keyword">public</span>:
 <a name="l00175"></a>00175     <span class="keyword">typedef</span> Allocator<void> base_allocator_type;
 <a name="l00176"></a>00176     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
 <a name="l00177"></a>00177     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
 <a name="l00178"></a>00178     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
 <a name="l00179"></a>00179     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00180"></a>00180         <span class="keyword">typedef</span> <a class="code" href="a00179.html">zero_allocator<U, Allocator></a> other;
+<a name="l00180"></a>00180         <span class="keyword">typedef</span> <a class="code" href="a00186.html">zero_allocator<U, Allocator></a> other;
 <a name="l00181"></a>00181     };
 <a name="l00182"></a>00182 };
 <a name="l00183"></a>00183 
 <a name="l00184"></a>00184 <span class="keyword">template</span><<span class="keyword">typename</span> T1, <span class="keyword">template</span><<span class="keyword">typename</span> X1> <span class="keyword">class </span>B1, <span class="keyword">typename</span> T2, <span class="keyword">template</span><<span class="keyword">typename</span> X2> <span class="keyword">class </span>B2>
-<a name="l00185"></a>00185 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator<T2,B2></a> &b) {
+<a name="l00185"></a>00185 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00186.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00186.html">zero_allocator<T2,B2></a> &b) {
 <a name="l00186"></a>00186     <span class="keywordflow">return</span> static_cast< B1<T1> >(a) == <span class="keyword">static_cast</span>< B2<T2> >(b);
 <a name="l00187"></a>00187 }
 <a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> T1, <span class="keyword">template</span><<span class="keyword">typename</span> X1> <span class="keyword">class </span>B1, <span class="keyword">typename</span> T2, <span class="keyword">template</span><<span class="keyword">typename</span> X2> <span class="keyword">class </span>B2>
diff --git a/doc/html/a00391.html b/doc/html/a00391.html
index 18637fa..3f7e059 100644
--- a/doc/html/a00391.html
+++ b/doc/html/a00391.html
@@ -1,6 +1,6 @@
 <!DOCTYPE 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_thread.h Source File</title>
+<title>tbb_config.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,8 +19,8 @@
     <li><a href="files.html"><span>File List</span></a></li>
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
-<h1>tbb_thread.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<h1>tbb_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,254 +39,116 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_thread_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_thread_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE void*</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <iosfwd></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <exception></span>             <span class="comment">// Need std::terminate from here.</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "tick_count.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keyword">namespace </span>tbb {
-<a name="l00040"></a>00040 
-<a name="l00042"></a>00042 <span class="keyword">namespace </span>internal {
-<a name="l00043"></a>00043     
-<a name="l00044"></a>00044     <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ); 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">namespace </span>internal {
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
-<a name="l00055"></a>00055     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free_closure_v3( <span class="keywordtype">void</span>* );
-<a name="l00056"></a>00056    
-<a name="l00057"></a>00057     <span class="keyword">struct </span>thread_closure_base {
-<a name="l00058"></a>00058         <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> allocate_closure_v3(size);}
-<a name="l00059"></a>00059         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {free_closure_v3(ptr);}
-<a name="l00060"></a>00060     };
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     <span class="keyword">template</span><<span class="keyword">class</span> F> <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
-<a name="l00063"></a>00063         F function;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00066"></a>00066             thread_closure_0 *<span class="keyword">self</span> = static_cast<thread_closure_0*>(c);
-<a name="l00067"></a>00067             <span class="keywordflow">try</span> {
-<a name="l00068"></a>00068                 <span class="keyword">self</span>->function();
-<a name="l00069"></a>00069             } <span class="keywordflow">catch</span> ( ... ) {
-<a name="l00070"></a>00070                 std::terminate();
-<a name="l00071"></a>00071             }
-<a name="l00072"></a>00072             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00073"></a>00073             <span class="keywordflow">return</span> 0;
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075         thread_closure_0( <span class="keyword">const</span> F& f ) : function(f) {}
-<a name="l00076"></a>00076     };
-<a name="l00078"></a>00078     <span class="keyword">template</span><<span class="keyword">class</span> F, <span class="keyword">class</span> X> <span class="keyword">struct </span>thread_closure_1: thread_closure_base {
-<a name="l00079"></a>00079         F function;
-<a name="l00080"></a>00080         X arg1;
-<a name="l00082"></a>00082         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00083"></a>00083             thread_closure_1 *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
-<a name="l00084"></a>00084             <span class="keywordflow">try</span> {
-<a name="l00085"></a>00085                 <span class="keyword">self</span>->function(self->arg1);
-<a name="l00086"></a>00086             } <span class="keywordflow">catch</span> ( ... ) {
-<a name="l00087"></a>00087                 std::terminate();
-<a name="l00088"></a>00088             }
-<a name="l00089"></a>00089             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00090"></a>00090             <span class="keywordflow">return</span> 0;
-<a name="l00091"></a>00091         }
-<a name="l00092"></a>00092         thread_closure_1( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
-<a name="l00093"></a>00093     };
-<a name="l00094"></a>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 {
-<a name="l00095"></a>00095         F function;
-<a name="l00096"></a>00096         X arg1;
-<a name="l00097"></a>00097         Y arg2;
-<a name="l00099"></a>00099         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00100"></a>00100             thread_closure_2 *<span class="keyword">self</span> = static_cast<thread_closure_2*>(c);
-<a name="l00101"></a>00101             <span class="keywordflow">try</span> {
-<a name="l00102"></a>00102                 <span class="keyword">self</span>->function(self->arg1, self->arg2);
-<a name="l00103"></a>00103             } <span class="keywordflow">catch</span> ( ... ) {
-<a name="l00104"></a>00104                 std::terminate();
-<a name="l00105"></a>00105             }
-<a name="l00106"></a>00106             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00107"></a>00107             <span class="keywordflow">return</span> 0;
-<a name="l00108"></a>00108         }
-<a name="l00109"></a>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) {}
-<a name="l00110"></a>00110     };
-<a name="l00111"></a>00111 
-<a name="l00113"></a>00113     <span class="keyword">class </span>tbb_thread_v3 {
-<a name="l00114"></a>00114         tbb_thread_v3(<span class="keyword">const</span> tbb_thread_v3&); <span class="comment">// = delete;   // Deny access</span>
-<a name="l00115"></a>00115     <span class="keyword">public</span>:
-<a name="l00116"></a>00116 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>        <span class="keyword">typedef</span> HANDLE native_handle_type; 
-<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>        <span class="keyword">typedef</span> pthread_t native_handle_type; 
-<a name="l00120"></a>00120 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00121"></a>00121 <span class="preprocessor"></span>
-<a name="l00122"></a>00122         <span class="keyword">class </span>id;
-<a name="l00124"></a>00124         tbb_thread_v3() : my_handle(0)
-<a name="l00125"></a>00125 #if _WIN32||_WIN64
-<a name="l00126"></a>00126             , my_thread_id(0)
-<a name="l00127"></a>00127 #endif <span class="comment">// _WIN32||_WIN64</span>
-<a name="l00128"></a>00128         {}
-<a name="l00129"></a>00129         
-<a name="l00131"></a>00131         <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> tbb_thread_v3(F f) {
-<a name="l00132"></a>00132             <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
-<a name="l00133"></a>00133             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
-<a name="l00134"></a>00134         }
-<a name="l00136"></a>00136         <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X> tbb_thread_v3(F f, X x) {
-<a name="l00137"></a>00137             <span class="keyword">typedef</span> internal::thread_closure_1<F,X> closure_type;
-<a name="l00138"></a>00138             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
-<a name="l00139"></a>00139         }
-<a name="l00141"></a>00141         <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y> tbb_thread_v3(F f, X x, Y y) {
-<a name="l00142"></a>00142             <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
-<a name="l00143"></a>00143             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
-<a name="l00144"></a>00144         }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146         tbb_thread_v3& operator=(tbb_thread_v3& x) {
-<a name="l00147"></a>00147             <span class="keywordflow">if</span> (joinable()) detach();
-<a name="l00148"></a>00148             my_handle = x.my_handle;
-<a name="l00149"></a>00149             x.my_handle = 0;
-<a name="l00150"></a>00150 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>            my_thread_id = x.my_thread_id;
-<a name="l00152"></a>00152             x.my_thread_id = 0;
-<a name="l00153"></a>00153 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
-<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
-<a name="l00160"></a>00160         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
-<a name="l00161"></a>00161         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
-<a name="l00162"></a>00162         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
-<a name="l00163"></a>00163         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
-<a name="l00164"></a>00164     
-<a name="l00166"></a>00166         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
-<a name="l00167"></a>00167     <span class="keyword">private</span>:
-<a name="l00168"></a>00168         native_handle_type my_handle; 
-<a name="l00169"></a>00169 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span>        DWORD my_thread_id;
-<a name="l00171"></a>00171 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span>
-<a name="l00174"></a>00174         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
-<a name="l00175"></a>00175                              <span class="keywordtype">void</span>* closure );
-<a name="l00176"></a>00176         <span class="keyword">friend</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
-<a name="l00178"></a>00178     };
-<a name="l00179"></a>00179         
-<a name="l00180"></a>00180     <span class="keyword">class </span>tbb_thread_v3::id { 
-<a name="l00181"></a>00181 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>        DWORD my_id;
-<a name="l00183"></a>00183         id( DWORD my_id ) : my_id(my_id) {}
-<a name="l00184"></a>00184 <span class="preprocessor">#else</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span>        pthread_t my_id;
-<a name="l00186"></a>00186         id( pthread_t my_id ) : my_id(my_id) {}
-<a name="l00187"></a>00187 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00189"></a>00189     <span class="keyword">public</span>:
-<a name="l00190"></a>00190         id() : my_id(0) {}
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00193"></a>00193         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00194"></a>00194         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00195"></a>00195         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00196"></a>00196         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00197"></a>00197         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00198"></a>00198         
-<a name="l00199"></a>00199         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
-<a name="l00200"></a>00200         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
-<a name="l00201"></a>00201         operator<< (std::basic_ostream<charT, traits> &out, 
-<a name="l00202"></a>00202                     tbb_thread_v3::id id)
-<a name="l00203"></a>00203         {
-<a name="l00204"></a>00204             out << <span class="keywordtype">id</span>.my_id;
-<a name="l00205"></a>00205             <span class="keywordflow">return</span> out;
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00208"></a>00208     }; <span class="comment">// tbb_thread_v3::id</span>
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
-<a name="l00211"></a>00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
-<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
-<a name="l00215"></a>00215 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>    }
-<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00218"></a>00218     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00219"></a>00219     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
-<a name="l00220"></a>00220     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00223"></a>00223     {
-<a name="l00224"></a>00224         <span class="keywordflow">return</span> x.my_id == y.my_id;
-<a name="l00225"></a>00225     }
-<a name="l00226"></a>00226     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00227"></a>00227     {
-<a name="l00228"></a>00228         <span class="keywordflow">return</span> x.my_id != y.my_id;
-<a name="l00229"></a>00229     }
-<a name="l00230"></a>00230     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00231"></a>00231     {
-<a name="l00232"></a>00232         <span class="keywordflow">return</span> x.my_id < y.my_id;
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00235"></a>00235     {
-<a name="l00236"></a>00236         <span class="keywordflow">return</span> x.my_id <= y.my_id;
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00239"></a>00239     {
-<a name="l00240"></a>00240         <span class="keywordflow">return</span> x.my_id > y.my_id;
-<a name="l00241"></a>00241     }
-<a name="l00242"></a>00242     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00243"></a>00243     {
-<a name="l00244"></a>00244         <span class="keywordflow">return</span> x.my_id >= y.my_id;
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 } <span class="comment">// namespace internal;</span>
-<a name="l00248"></a>00248 
-<a name="l00250"></a>00250 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="keyword">using</span> internal::operator==;
-<a name="l00253"></a>00253 <span class="keyword">using</span> internal::operator!=;
-<a name="l00254"></a>00254 <span class="keyword">using</span> internal::operator<;
-<a name="l00255"></a>00255 <span class="keyword">using</span> internal::operator>;
-<a name="l00256"></a>00256 <span class="keyword">using</span> internal::operator<=;
-<a name="l00257"></a>00257 <span class="keyword">using</span> internal::operator>=;
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
-<a name="l00260"></a>00260     internal::move_v3(t1, t2);
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
-<a name="l00264"></a>00264     tbb::tbb_thread::native_handle_type h = t1.my_handle;
-<a name="l00265"></a>00265     t1.my_handle = t2.my_handle;
-<a name="l00266"></a>00266     t2.my_handle = h;
-<a name="l00267"></a>00267 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00268"></a>00268 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
-<a name="l00269"></a>00269     t1.my_thread_id = t2.my_thread_id;
-<a name="l00270"></a>00270     t2.my_thread_id = i;
-<a name="l00271"></a>00271 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00272"></a>00272 }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 <span class="keyword">namespace </span>this_tbb_thread {
-<a name="l00275"></a>00275     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
-<a name="l00277"></a>00277     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
-<a name="l00279"></a>00279     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
-<a name="l00280"></a>00280         internal::thread_sleep_v3(i);  
-<a name="l00281"></a>00281     }
-<a name="l00282"></a>00282 }  <span class="comment">// namespace this_tbb_thread</span>
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 } <span class="comment">// namespace tbb</span>
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#else</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 
+<a name="l00070"></a>00070 <span class="preprocessor">#ifndef __TBB_EXCEPTIONS</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXCEPTIONS 1</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="preprocessor">#ifndef __TBB_NEW_ITT_NOTIFY</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NEW_ITT_NOTIFY 1</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_NEW_ITT_NOTIFY */</span>
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083 <span class="comment">/* TODO: The following condition should be extended as soon as new compilers/runtimes </span>
+<a name="l00084"></a>00084 <span class="comment">         with std::exception_ptr support appear. */</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__GNUC__==4 && __GNUC_MINOR__>=4))</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span>
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00095"></a>00095 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span>
+<a name="l00104"></a>00104 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>
+<a name="l00107"></a>00107 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00110"></a>00110 
+<a name="l00113"></a>00113 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__==4 && !defined(__INTEL_COMPILER)</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 1</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>
+<a name="l00123"></a>00123 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 0x1500 && !defined(__INTEL_COMPILER)</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>
+<a name="l00126"></a>00126 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00129"></a>00129 <span class="preprocessor">#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>
+<a name="l00131"></a>00131 <span class="preprocessor">    #define __TBB_EXCEPTION_HANDLING_BROKEN 1</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span>
+<a name="l00134"></a>00134 <span class="preprocessor">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span>
+<a name="l00136"></a>00136 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>
+<a name="l00139"></a>00139 <span class="preprocessor">#if __FreeBSD__</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>
+<a name="l00142"></a>00142 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00146"></a>00146 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="preprocessor">#if __LRB__</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_config_lrb.h"</span>
+<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span>
+<a name="l00153"></a>00153 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00380.html b/doc/html/a00392.html
similarity index 86%
rename from doc/html/a00380.html
rename to doc/html/a00392.html
index 96f11a1..588e541 100644
--- a/doc/html/a00380.html
+++ b/doc/html/a00392.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_config_lrb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -46,15 +46,18 @@
 <a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #error tbb_config_lrb.h should be included only when building for LRB platform</span>
 <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#define __TBB_FLOATING_POINT_BROKEN 1</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#define __TBB_rel_acq_fence __TBB_release_consistency_helper</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if __TBB_LRB_NATIVE && !__FreeBSD__</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #error LRB compiler does not define __FreeBSD__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__FreeBSD__ */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_lrb_H */</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#if __TBB_LRB_NATIVE</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#define __TBB_FLOATING_POINT_BROKEN 1</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#define __TBB_rel_acq_fence __TBB_release_consistency_helper</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#if !__FreeBSD__</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">    #error LRB compiler does not define __FreeBSD__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__FreeBSD__ */</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#endif </span><span class="comment">/*__TBB_LRB_NATIVE*/</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_lrb_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00393.html b/doc/html/a00393.html
new file mode 100644
index 0000000..432935e
--- /dev/null
+++ b/doc/html/a00393.html
@@ -0,0 +1,300 @@
+<!DOCTYPE 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_exception.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File List</span></a></li>
+    <li><a href="globals.html"><span>File Members</span></a></li>
+  </ul></div>
+<h1>tbb_exception.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_exception_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_exception_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_EXCEPTIONS && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#error The current compilation environment does not support exception handling. Please set __TBB_EXCEPTIONS to 0 in tbb_config.h</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <stdexcept></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <string></span> <span class="comment">// required to construct std exception classes</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span>
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb {
+<a name="l00036"></a>00036 
+<a name="l00038"></a><a class="code" href="a00126.html">00038</a> <span class="keyword">class </span><a class="code" href="a00126.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
+<a name="l00039"></a>00039 <span class="keyword">public</span>:
+<a name="l00040"></a>00040     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
+<a name="l00043"></a><a class="code" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">00043</a>     <span class="comment">/*override*/</span> <a class="code" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">~bad_last_alloc</a>() throw() {}
+<a name="l00044"></a>00044 };
+<a name="l00045"></a>00045 
+<a name="l00047"></a><a class="code" href="a00146.html">00047</a> <span class="keyword">class </span><a class="code" href="a00146.html">improper_lock</a> : <span class="keyword">public</span> std::exception {
+<a name="l00048"></a>00048 <span class="keyword">public</span>:
+<a name="l00049"></a>00049     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
+<a name="l00050"></a>00050 };
+<a name="l00051"></a>00051 
+<a name="l00053"></a><a class="code" href="a00148.html">00053</a> <span class="keyword">class </span><a class="code" href="a00148.html">missing_wait</a> : <span class="keyword">public</span> std::exception {
+<a name="l00054"></a>00054 <span class="keyword">public</span>:
+<a name="l00055"></a>00055     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
+<a name="l00056"></a>00056 };
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00147.html">00059</a> <span class="keyword">class </span><a class="code" href="a00147.html">invalid_multiple_scheduling</a> : <span class="keyword">public</span> std::exception {
+<a name="l00060"></a>00060 <span class="keyword">public</span>:
+<a name="l00061"></a>00061     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
+<a name="l00062"></a>00062 };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">namespace </span>internal {
+<a name="l00066"></a>00066 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068 <span class="keyword">enum</span> exception_id {
+<a name="l00069"></a>00069     eid_bad_alloc = 1,
+<a name="l00070"></a>00070     eid_bad_last_alloc,
+<a name="l00071"></a>00071     eid_nonpositive_step,
+<a name="l00072"></a>00072     eid_out_of_range,
+<a name="l00073"></a>00073     eid_segment_range_error,
+<a name="l00074"></a>00074     eid_index_range_error,
+<a name="l00075"></a>00075     eid_missing_wait,
+<a name="l00076"></a>00076     eid_invalid_multiple_scheduling,
+<a name="l00077"></a>00077     eid_improper_lock,
+<a name="l00079"></a>00079 
+<a name="l00081"></a>00081     eid_max
+<a name="l00082"></a>00082 };
+<a name="l00083"></a>00083 
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
+<a name="l00088"></a>00088 
+<a name="l00090"></a>00090 <span class="keyword">inline</span> <span class="keywordtype">void</span> throw_exception ( exception_id eid ) { throw_exception_v4(eid); }
+<a name="l00091"></a>00091 } <span class="comment">// namespace internal</span>
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093 } <span class="comment">// namespace tbb</span>
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00097"></a>00097 <span class="preprocessor">#include <exception></span>
+<a name="l00098"></a>00098 <span class="preprocessor">#include <typeinfo></span>
+<a name="l00099"></a>00099 <span class="preprocessor">#include <new></span>
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101 <span class="keyword">namespace </span>tbb {
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 
+<a name="l00124"></a><a class="code" href="a00180.html">00124</a> <span class="keyword">class </span><a class="code" href="a00180.html">tbb_exception</a> : <span class="keyword">public</span> std::exception
+<a name="l00125"></a>00125 {
+<a name="l00129"></a>00129     <span class="keywordtype">void</span>* operator new ( size_t );
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 <span class="keyword">public</span>:
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134     <span class="keyword">virtual</span> <a class="code" href="a00180.html">tbb_exception</a>* <a class="code" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00135"></a>00135     
+<a name="l00137"></a>00137 
+<a name="l00139"></a>00139     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142 
+<a name="l00146"></a>00146     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 0;
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00180.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00153"></a>00153 
+<a name="l00160"></a><a class="code" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">00160</a>     <span class="keywordtype">void</span> <a class="code" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete </a>( <span class="keywordtype">void</span>* p ) {
+<a name="l00161"></a>00161         internal::deallocate_via_handler_v3(p);
+<a name="l00162"></a>00162     }
+<a name="l00163"></a>00163 };
+<a name="l00164"></a>00164 
+<a name="l00166"></a>00166 
+<a name="l00170"></a><a class="code" href="a00132.html">00170</a> <span class="keyword">class </span><a class="code" href="a00132.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00180.html">tbb_exception</a>
+<a name="l00171"></a>00171 {
+<a name="l00172"></a>00172 <span class="keyword">public</span>:
+<a name="l00173"></a>00173     <a class="code" href="a00132.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00132.html">captured_exception</a>& src )
+<a name="l00174"></a>00174         : <a class="code" href="a00180.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
+<a name="l00175"></a>00175     {
+<a name="l00176"></a>00176         set(src.<a class="code" href="a00132.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00132.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00177"></a>00177     }
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179     <a class="code" href="a00132.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
+<a name="l00180"></a>00180         : my_dynamic(<span class="keyword">false</span>)
+<a name="l00181"></a>00181     {
+<a name="l00182"></a>00182         set(name, info);
+<a name="l00183"></a>00183     }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185     __TBB_EXPORTED_METHOD ~<a class="code" href="a00132.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
+<a name="l00186"></a>00186         clear();
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189     <a class="code" href="a00132.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00132.html">captured_exception</a>& src ) {
+<a name="l00190"></a>00190         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
+<a name="l00191"></a>00191             clear();
+<a name="l00192"></a>00192             set(src.<a class="code" href="a00132.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00132.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00193"></a>00193         }
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197     <span class="comment">/*override*/</span> 
+<a name="l00198"></a>00198     <a class="code" href="a00132.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00132.html#837a50b8f6a800bda225c39d1699643f">move</a> () <span class="keywordflow">throw</span>();
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200     <span class="comment">/*override*/</span> 
+<a name="l00201"></a>00201     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00132.html#93d875d3555502ff6f18513525de204c">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203     <span class="comment">/*override*/</span> 
+<a name="l00204"></a><a class="code" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">00204</a>     <span class="keywordtype">void</span> <a class="code" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { <span class="keywordflow">throw</span> *<span class="keyword">this</span>; }
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     <span class="comment">/*override*/</span> 
+<a name="l00207"></a>00207     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209     <span class="comment">/*override*/</span> 
+<a name="l00210"></a>00210     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set ( const <span class="keywordtype">char</span>* name, const <span class="keywordtype">char</span>* info ) throw();
+<a name="l00213"></a>00213     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear () throw();
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 private:
+<a name="l00217"></a>00217     <a class="code" href="a00132.html">captured_exception</a>() {}
+<a name="l00218"></a>00218 
+<a name="l00220"></a>00220     <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 );
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00223"></a>00223     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00224"></a>00224     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_info;
+<a name="l00225"></a>00225 };
+<a name="l00226"></a>00226 
+<a name="l00228"></a>00228 
+<a name="l00232"></a>00232 <span class="keyword">template</span><<span class="keyword">typename</span> ExceptionData>
+<a name="l00233"></a><a class="code" href="a00149.html">00233</a> <span class="keyword">class </span><a class="code" href="a00149.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00180.html">tbb_exception</a>
+<a name="l00234"></a>00234 {
+<a name="l00235"></a>00235     <span class="keyword">typedef</span> <a class="code" href="a00149.html">movable_exception<ExceptionData></a> <a class="code" href="a00149.html">self_type</a>;
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237 <span class="keyword">public</span>:
+<a name="l00238"></a>00238     <a class="code" href="a00149.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data ) 
+<a name="l00239"></a>00239         : <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(data)
+<a name="l00240"></a>00240         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00241"></a>00241         , my_exception_name(<span class="keyword">typeid</span>(<a class="code" href="a00149.html">self_type</a>).<a class="code" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>())
+<a name="l00242"></a>00242     {}
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244     <a class="code" href="a00149.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00149.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> () 
+<a name="l00245"></a>00245         : <a class="code" href="a00180.html">tbb_exception</a>(src)
+<a name="l00246"></a>00246         , <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
+<a name="l00247"></a>00247         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00248"></a>00248         , my_exception_name(src.<a class="code" href="a00149.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
+<a name="l00249"></a>00249     {}
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251     ~<a class="code" href="a00149.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253     <span class="keyword">const</span> <a class="code" href="a00149.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00149.html">movable_exception</a>& src ) {
+<a name="l00254"></a>00254         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
+<a name="l00255"></a>00255             <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00256"></a>00256             my_exception_name = src.<a class="code" href="a00149.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
+<a name="l00257"></a>00257         }
+<a name="l00258"></a>00258         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00259"></a>00259     }
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261     ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263     <span class="keyword">const</span> ExceptionData& data () <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
+<a name="l00264"></a>00264 
+<a name="l00265"></a><a class="code" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">00265</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
+<a name="l00266"></a>00266 
+<a name="l00267"></a><a class="code" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">00267</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
+<a name="l00268"></a>00268 
+<a name="l00269"></a>00269     <span class="comment">/*override*/</span> 
+<a name="l00270"></a><a class="code" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">00270</a>     <a class="code" href="a00149.html">movable_exception</a>* <a class="code" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> () throw() {
+<a name="l00271"></a>00271         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00149.html">movable_exception</a>));
+<a name="l00272"></a>00272         <span class="keywordflow">if</span> ( e ) {
+<a name="l00273"></a>00273             ::new (e) movable_exception(*<span class="keyword">this</span>);
+<a name="l00274"></a>00274             ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
+<a name="l00275"></a>00275         }
+<a name="l00276"></a>00276         <span class="keywordflow">return</span> (movable_exception*)e;
+<a name="l00277"></a>00277     }
+<a name="l00278"></a>00278     <span class="comment">/*override*/</span> 
+<a name="l00279"></a><a class="code" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">00279</a>     <span class="keywordtype">void</span> <a class="code" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> () throw() {
+<a name="l00280"></a>00280         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
+<a name="l00281"></a>00281         <span class="keywordflow">if</span> ( my_dynamic ) {
+<a name="l00282"></a>00282             this->~<a class="code" href="a00149.html">movable_exception</a>();
+<a name="l00283"></a>00283             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
+<a name="l00284"></a>00284         }
+<a name="l00285"></a>00285     }
+<a name="l00286"></a>00286     <span class="comment">/*override*/</span> 
+<a name="l00287"></a><a class="code" href="a00149.html#17cffba35811c92b7e65d63506b69602">00287</a>     <span class="keywordtype">void</span> <a class="code" href="a00149.html#17cffba35811c92b7e65d63506b69602">throw_self</a> () {
+<a name="l00288"></a>00288         <span class="keywordflow">throw</span> *<span class="keyword">this</span>;
+<a name="l00289"></a>00289     }
+<a name="l00290"></a>00290 
+<a name="l00291"></a>00291 <span class="keyword">protected</span>:
+<a name="l00293"></a><a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">00293</a>     ExceptionData  <a class="code" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00294"></a>00294 
+<a name="l00295"></a>00295 <span class="keyword">private</span>:
+<a name="l00297"></a>00297     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00298"></a>00298 
+<a name="l00300"></a>00300 
+<a name="l00301"></a>00301     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00302"></a>00302 };
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00305"></a>00305 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
+<a name="l00306"></a>00306 
+<a name="l00308"></a>00308 
+<a name="l00310"></a><a class="code" href="a00181.html">00310</a> <span class="keyword">class </span><a class="code" href="a00181.html">tbb_exception_ptr</a> {
+<a name="l00311"></a>00311     std::exception_ptr  my_ptr;
+<a name="l00312"></a>00312 
+<a name="l00313"></a>00313 <span class="keyword">public</span>:
+<a name="l00314"></a>00314     <span class="keyword">static</span> <a class="code" href="a00181.html">tbb_exception_ptr</a>* allocate ();
+<a name="l00315"></a>00315     <span class="keyword">static</span> <a class="code" href="a00181.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00180.html">tbb_exception</a>& tag );
+<a name="l00317"></a>00317     <span class="keyword">static</span> <a class="code" href="a00181.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00132.html">captured_exception</a>& src );
+<a name="l00318"></a>00318     
+<a name="l00320"></a>00320 
+<a name="l00321"></a>00321     <span class="keywordtype">void</span> <a class="code" href="a00181.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00322"></a>00322 
+<a name="l00324"></a><a class="code" href="a00181.html#292832fd5c523e3d8081a22247840a1d">00324</a>     <span class="keywordtype">void</span> <a class="code" href="a00181.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> () { std::rethrow_exception(my_ptr); }
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326 <span class="keyword">private</span>:
+<a name="l00327"></a>00327     <a class="code" href="a00181.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr& src ) : my_ptr(src) {}
+<a name="l00328"></a>00328     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00132.html">captured_exception</a>& src ) : my_ptr(std::copy_exception(src)) {}
+<a name="l00329"></a>00329 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331 } <span class="comment">// namespace internal</span>
+<a name="l00332"></a>00332 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334 } <span class="comment">// namespace tbb</span>
+<a name="l00335"></a>00335 
+<a name="l00336"></a>00336 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00337"></a>00337 
+<a name="l00338"></a>00338 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_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/a00382.html b/doc/html/a00394.html
similarity index 59%
rename from doc/html/a00382.html
rename to doc/html/a00394.html
index 85a2e39..bfe97d6 100644
--- a/doc/html/a00382.html
+++ b/doc/html/a00394.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_machine.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -98,501 +98,503 @@
 <a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
 <a name="l00078"></a>00078 <span class="preprocessor">#elif __x86_64__</span>
 <a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
-<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00080"></a>00080 <span class="preprocessor">#elif __sparc</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#include "machine/sunos_sparc.h"</span>
 <a name="l00082"></a>00082 <span class="preprocessor">#endif</span>
 <a name="l00083"></a>00083 <span class="preprocessor"></span>
-<a name="l00084"></a>00084 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
-<a name="l00085"></a>00085 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) \</span>
-<a name="l00086"></a>00086 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
-<a name="l00087"></a>00087 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied </span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span>
-<a name="l00091"></a>00091 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
-<a name="l00093"></a>00093 <span class="preprocessor">    template<typename T></span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span>    <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
-<a name="l00095"></a>00095         T temp = location;
-<a name="l00096"></a>00096         __TBB_release_consistency_helper();
-<a name="l00097"></a>00097         <span class="keywordflow">return</span> temp;
-<a name="l00098"></a>00098     }
-<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span>
-<a name="l00101"></a>00101 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
-<a name="l00103"></a>00103 <span class="preprocessor">    template<typename T, typename V></span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> T& location, V value) {
-<a name="l00105"></a>00105         __TBB_release_consistency_helper();
-<a name="l00106"></a>00106         location = T(value); 
-<a name="l00107"></a>00107     }
-<a name="l00108"></a>00108 <span class="preprocessor">#endif</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span>
-<a name="l00110"></a>00110 <span class="preprocessor">#ifndef __TBB_Pause</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
-<a name="l00112"></a>00112         __TBB_Yield();
-<a name="l00113"></a>00113     }
-<a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span>
-<a name="l00116"></a>00116 <span class="keyword">namespace </span>tbb {
-<a name="l00117"></a>00117 <span class="keyword">namespace </span>internal {
-<a name="l00118"></a>00118 
+<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
+<a name="l00087"></a>00087 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) \</span>
+<a name="l00088"></a>00088 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
+<a name="l00089"></a>00089 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied </span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span>
+<a name="l00093"></a>00093 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
+<a name="l00095"></a>00095 <span class="preprocessor">    template<typename T></span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>    <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
+<a name="l00097"></a>00097         T temp = location;
+<a name="l00098"></a>00098         __TBB_release_consistency_helper();
+<a name="l00099"></a>00099         <span class="keywordflow">return</span> temp;
+<a name="l00100"></a>00100     }
+<a name="l00101"></a>00101 <span class="preprocessor">#endif</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>
+<a name="l00103"></a>00103 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
+<a name="l00105"></a>00105 <span class="preprocessor">    template<typename T, typename V></span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> T& location, V value) {
+<a name="l00107"></a>00107         __TBB_release_consistency_helper();
+<a name="l00108"></a>00108         location = T(value); 
+<a name="l00109"></a>00109     }
+<a name="l00110"></a>00110 <span class="preprocessor">#endif</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>
+<a name="l00112"></a>00112 <span class="preprocessor">#ifndef __TBB_Pause</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
+<a name="l00114"></a>00114         __TBB_Yield();
+<a name="l00115"></a>00115     }
+<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>
+<a name="l00118"></a>00118 <span class="keyword">namespace </span>tbb {
+<a name="l00119"></a>00119 <span class="keyword">namespace </span>internal {
 <a name="l00120"></a>00120 
-<a name="l00121"></a><a class="code" href="a00119.html">00121</a> <span class="keyword">class </span><a class="code" href="a00119.html">atomic_backoff</a> {
-<a name="l00123"></a>00123 
-<a name="l00125"></a>00125     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
-<a name="l00126"></a>00126     int32_t count;
-<a name="l00127"></a>00127 <span class="keyword">public</span>:
-<a name="l00128"></a>00128     <a class="code" href="a00119.html">atomic_backoff</a>() : count(1) {}
-<a name="l00129"></a>00129 
-<a name="l00131"></a><a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">00131</a>     <span class="keywordtype">void</span> <a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
-<a name="l00132"></a>00132         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00133"></a>00133             __TBB_Pause(count);
-<a name="l00134"></a>00134             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00135"></a>00135             count*=2;
-<a name="l00136"></a>00136         } <span class="keywordflow">else</span> {
-<a name="l00137"></a>00137             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
-<a name="l00138"></a>00138             __TBB_Yield();
-<a name="l00139"></a>00139         }
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="comment">// pause for a few times and then return false immediately.</span>
-<a name="l00143"></a>00143     <span class="keywordtype">bool</span> bounded_pause() {
-<a name="l00144"></a>00144         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00145"></a>00145             __TBB_Pause(count);
-<a name="l00146"></a>00146             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00147"></a>00147             count*=2;
-<a name="l00148"></a>00148             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00149"></a>00149         } <span class="keywordflow">else</span> {
-<a name="l00150"></a>00150             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00151"></a>00151         }
-<a name="l00152"></a>00152     }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="keywordtype">void</span> reset() {
-<a name="l00155"></a>00155         count = 1;
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 };
-<a name="l00158"></a>00158 
+<a name="l00122"></a>00122 
+<a name="l00123"></a><a class="code" href="a00124.html">00123</a> <span class="keyword">class </span><a class="code" href="a00124.html">atomic_backoff</a> {
+<a name="l00125"></a>00125 
+<a name="l00127"></a>00127     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
+<a name="l00128"></a>00128     int32_t count;
+<a name="l00129"></a>00129 <span class="keyword">public</span>:
+<a name="l00130"></a>00130     <a class="code" href="a00124.html">atomic_backoff</a>() : count(1) {}
+<a name="l00131"></a>00131 
+<a name="l00133"></a><a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">00133</a>     <span class="keywordtype">void</span> <a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
+<a name="l00134"></a>00134         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00135"></a>00135             __TBB_Pause(count);
+<a name="l00136"></a>00136             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00137"></a>00137             count*=2;
+<a name="l00138"></a>00138         } <span class="keywordflow">else</span> {
+<a name="l00139"></a>00139             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
+<a name="l00140"></a>00140             __TBB_Yield();
+<a name="l00141"></a>00141         }
+<a name="l00142"></a>00142     }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     <span class="comment">// pause for a few times and then return false immediately.</span>
+<a name="l00145"></a>00145     <span class="keywordtype">bool</span> bounded_pause() {
+<a name="l00146"></a>00146         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00147"></a>00147             __TBB_Pause(count);
+<a name="l00148"></a>00148             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00149"></a>00149             count*=2;
+<a name="l00150"></a>00150             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00151"></a>00151         } <span class="keywordflow">else</span> {
+<a name="l00152"></a>00152             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154     }
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156     <span class="keywordtype">void</span> reset() {
+<a name="l00157"></a>00157         count = 1;
+<a name="l00158"></a>00158     }
+<a name="l00159"></a>00159 };
 <a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00162"></a>00162 <span class="keywordtype">void</span> spin_wait_while_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location, U value ) {
-<a name="l00163"></a>00163     atomic_backoff backoff;
-<a name="l00164"></a>00164     <span class="keywordflow">while</span>( location==value ) backoff.pause();
-<a name="l00165"></a>00165 }
-<a name="l00166"></a>00166 
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00164"></a>00164 <span class="keywordtype">void</span> spin_wait_while_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location, U value ) {
+<a name="l00165"></a>00165     atomic_backoff backoff;
+<a name="l00166"></a>00166     <span class="keywordflow">while</span>( location==value ) backoff.pause();
+<a name="l00167"></a>00167 }
 <a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00170"></a>00170 <span class="keywordtype">void</span> spin_wait_until_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location, <span class="keyword">const</span> U value ) {
-<a name="l00171"></a>00171     atomic_backoff backoff;
-<a name="l00172"></a>00172     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
-<a name="l00173"></a>00173 }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
-<a name="l00176"></a>00176 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
-<a name="l00177"></a>00177 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
-<a name="l00178"></a>00178 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00179"></a>00179 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
-<a name="l00180"></a>00180     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
-<a name="l00181"></a>00181 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
-<a name="l00183"></a>00183 <span class="preprocessor">#else</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
-<a name="l00185"></a>00185 <span class="preprocessor">#endif</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
-<a name="l00187"></a>00187     atomic_backoff b;
-<a name="l00188"></a>00188     uint32_t result;
-<a name="l00189"></a>00189     <span class="keywordflow">for</span>(;;) {
-<a name="l00190"></a>00190         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
-<a name="l00191"></a>00191         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-<a name="l00192"></a>00192         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-<a name="l00193"></a>00193         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
-<a name="l00194"></a>00194         result = __TBB_CompareAndSwap4( base, new_value, old_value );
-<a name="l00195"></a>00195         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
-<a name="l00196"></a>00196           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
-<a name="l00197"></a>00197             <span class="keywordflow">break</span>;
-<a name="l00198"></a>00198         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
-<a name="l00199"></a>00199             b.pause();
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
-<a name="l00202"></a>00202 }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00205"></a>00205 <span class="keyword">inline</span> T __TBB_CompareAndSwapGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value, T comparand ) { 
-<a name="l00206"></a>00206     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
-<a name="l00207"></a>00207 }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="keyword">template</span><>
-<a name="l00210"></a>00210 <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 ) {
-<a name="l00211"></a>00211 #ifdef __TBB_CompareAndSwap1
-<a name="l00212"></a>00212     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
-<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
-<a name="l00215"></a>00215 <span class="preprocessor">#endif</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>}
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="keyword">template</span><>
-<a name="l00219"></a>00219 <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 ) {
-<a name="l00220"></a>00220 #ifdef __TBB_CompareAndSwap2
-<a name="l00221"></a>00221     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
-<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
-<a name="l00224"></a>00224 <span class="preprocessor">#endif</span>
-<a name="l00225"></a>00225 <span class="preprocessor"></span>}
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="keyword">template</span><>
-<a name="l00228"></a>00228 <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 ) { 
-<a name="l00229"></a>00229     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="keyword">template</span><>
-<a name="l00233"></a>00233 <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 ) { 
-<a name="l00234"></a>00234     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
-<a name="l00235"></a>00235 }
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00238"></a>00238 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
-<a name="l00239"></a>00239     atomic_backoff b;
-<a name="l00240"></a>00240     T result;
-<a name="l00241"></a>00241     <span class="keywordflow">for</span>(;;) {
-<a name="l00242"></a>00242         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00243"></a>00243         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
-<a name="l00244"></a>00244         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
-<a name="l00245"></a>00245             <span class="keywordflow">break</span>;
-<a name="l00246"></a>00246         b.pause();
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248     <span class="keywordflow">return</span> result;
-<a name="l00249"></a>00249 }
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00252"></a>00252 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
-<a name="l00253"></a>00253     atomic_backoff b;
-<a name="l00254"></a>00254     T result;
-<a name="l00255"></a>00255     <span class="keywordflow">for</span>(;;) {
-<a name="l00256"></a>00256         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00257"></a>00257         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
-<a name="l00258"></a>00258         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result ) 
-<a name="l00259"></a>00259             <span class="keywordflow">break</span>;
-<a name="l00260"></a>00260         b.pause();
-<a name="l00261"></a>00261     }
-<a name="l00262"></a>00262     <span class="keywordflow">return</span> result;
-<a name="l00263"></a>00263 }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
-<a name="l00266"></a>00266 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
-<a name="l00267"></a>00267 <span class="comment">// arrays of that type can be declared without initializers.  </span>
-<a name="l00268"></a>00268 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
-<a name="l00269"></a>00269 <span class="comment">// to a type bigger than T.</span>
-<a name="l00270"></a>00270 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
-<a name="l00271"></a>00271 <span class="comment">// strictest alignment is 16.</span>
-<a name="l00272"></a>00272 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span>
-<a name="l00274"></a>00274 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
-<a name="l00276"></a>00276     <span class="keywordtype">int</span> member[4];
-<a name="l00277"></a>00277 } __attribute__((aligned(16)));
-<a name="l00278"></a>00278 <span class="preprocessor">#elif _MSC_VER</span>
-<a name="l00279"></a>00279 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
-<a name="l00280"></a>00280     <span class="keywordtype">int</span> member[4];
-<a name="l00281"></a>00281 };
-<a name="l00282"></a>00282 <span class="preprocessor">#else</span>
-<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00285"></a>00285 <span class="preprocessor"></span>
-<a name="l00286"></a>00286 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
-<a name="l00287"></a>00287 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
-<a name="l00288"></a>00288 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
-<a name="l00289"></a>00289 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
-<a name="l00290"></a>00290 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  </span>
-<a name="l00294"></a>00294 <span class="preprocessor"></span>
-<a name="l00296"></a>00296 <span class="preprocessor">template<size_t Size, typename T> </span>
-<a name="l00297"></a><a class="code" href="a00178.html">00297</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00178.html">work_around_alignment_bug</a> {
-<a name="l00298"></a>00298 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00299"></a>00299 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
-<a name="l00300"></a>00300 <span class="preprocessor">#else</span>
-<a name="l00301"></a>00301 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
-<a name="l00302"></a>00302 <span class="preprocessor">#endif</span>
-<a name="l00303"></a>00303 <span class="preprocessor"></span>};
-<a name="l00304"></a>00304 <span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment></span>
-<a name="l00305"></a>00305 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
-<a name="l00306"></a>00306 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
-<a name="l00307"></a>00307 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00308"></a>00308 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 } <span class="comment">// namespace internal</span>
-<a name="l00313"></a>00313 } <span class="comment">// namespace tbb</span>
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
-<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
-<a name="l00317"></a>00317 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00318"></a>00318 <span class="preprocessor"></span>
-<a name="l00319"></a>00319 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
-<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
-<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00322"></a>00322 <span class="preprocessor"></span>
-<a name="l00323"></a>00323 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00326"></a>00326 <span class="preprocessor"></span>
-<a name="l00327"></a>00327 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
-<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
-<a name="l00329"></a>00329 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00330"></a>00330 <span class="preprocessor"></span>
-<a name="l00331"></a>00331 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
-<a name="l00332"></a>00332 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
-<a name="l00333"></a>00333 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00334"></a>00334 <span class="preprocessor"></span>
-<a name="l00335"></a>00335 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
-<a name="l00336"></a>00336 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
-<a name="l00337"></a>00337 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00338"></a>00338 <span class="preprocessor"></span>
-<a name="l00339"></a>00339 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
-<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00342"></a>00342 <span class="preprocessor"></span>
-<a name="l00343"></a>00343 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
-<a name="l00344"></a>00344 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00345"></a>00345 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00346"></a>00346 <span class="preprocessor"></span>
-<a name="l00347"></a>00347 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
-<a name="l00348"></a>00348 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
-<a name="l00349"></a>00349 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00350"></a>00350 <span class="preprocessor"></span>
-<a name="l00351"></a>00351 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
-<a name="l00352"></a>00352 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
-<a name="l00353"></a>00353 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00354"></a>00354 <span class="preprocessor"></span>
-<a name="l00355"></a>00355 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
-<a name="l00356"></a>00356 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
-<a name="l00357"></a>00357 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00358"></a>00358 <span class="preprocessor"></span>
-<a name="l00359"></a>00359 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
-<a name="l00360"></a>00360 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
-<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00362"></a>00362 <span class="preprocessor"></span>
-<a name="l00363"></a>00363 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
-<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00365"></a>00365 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00366"></a>00366 <span class="preprocessor"></span>
-<a name="l00367"></a>00367 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00172"></a>00172 <span class="keywordtype">void</span> spin_wait_until_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location, <span class="keyword">const</span> U value ) {
+<a name="l00173"></a>00173     atomic_backoff backoff;
+<a name="l00174"></a>00174     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
+<a name="l00175"></a>00175 }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
+<a name="l00178"></a>00178 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
+<a name="l00179"></a>00179 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
+<a name="l00180"></a>00180 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00181"></a>00181 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
+<a name="l00182"></a>00182     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
+<a name="l00183"></a>00183 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
+<a name="l00185"></a>00185 <span class="preprocessor">#else</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
+<a name="l00187"></a>00187 <span class="preprocessor">#endif</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
+<a name="l00189"></a>00189     atomic_backoff b;
+<a name="l00190"></a>00190     uint32_t result;
+<a name="l00191"></a>00191     <span class="keywordflow">for</span>(;;) {
+<a name="l00192"></a>00192         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
+<a name="l00193"></a>00193         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
+<a name="l00194"></a>00194         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+<a name="l00195"></a>00195         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
+<a name="l00196"></a>00196         result = __TBB_CompareAndSwap4( base, new_value, old_value );
+<a name="l00197"></a>00197         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
+<a name="l00198"></a>00198           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
+<a name="l00199"></a>00199             <span class="keywordflow">break</span>;
+<a name="l00200"></a>00200         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
+<a name="l00201"></a>00201             b.pause();
+<a name="l00202"></a>00202     }
+<a name="l00203"></a>00203     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
+<a name="l00204"></a>00204 }
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00207"></a>00207 <span class="keyword">inline</span> T __TBB_CompareAndSwapGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value, T comparand ) { 
+<a name="l00208"></a>00208     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+<a name="l00209"></a>00209 }
+<a name="l00210"></a>00210 
+<a name="l00211"></a>00211 <span class="keyword">template</span><>
+<a name="l00212"></a>00212 <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 ) {
+<a name="l00213"></a>00213 #ifdef __TBB_CompareAndSwap1
+<a name="l00214"></a>00214     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
+<a name="l00215"></a>00215 <span class="preprocessor">#else</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
+<a name="l00217"></a>00217 <span class="preprocessor">#endif</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>}
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220 <span class="keyword">template</span><>
+<a name="l00221"></a>00221 <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 ) {
+<a name="l00222"></a>00222 #ifdef __TBB_CompareAndSwap2
+<a name="l00223"></a>00223     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
+<a name="l00224"></a>00224 <span class="preprocessor">#else</span>
+<a name="l00225"></a>00225 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
+<a name="l00226"></a>00226 <span class="preprocessor">#endif</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span>}
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="keyword">template</span><>
+<a name="l00230"></a>00230 <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 ) { 
+<a name="l00231"></a>00231     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234 <span class="keyword">template</span><>
+<a name="l00235"></a>00235 <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 ) { 
+<a name="l00236"></a>00236     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
+<a name="l00237"></a>00237 }
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00240"></a>00240 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
+<a name="l00241"></a>00241     atomic_backoff b;
+<a name="l00242"></a>00242     T result;
+<a name="l00243"></a>00243     <span class="keywordflow">for</span>(;;) {
+<a name="l00244"></a>00244         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00245"></a>00245         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
+<a name="l00246"></a>00246         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
+<a name="l00247"></a>00247             <span class="keywordflow">break</span>;
+<a name="l00248"></a>00248         b.pause();
+<a name="l00249"></a>00249     }
+<a name="l00250"></a>00250     <span class="keywordflow">return</span> result;
+<a name="l00251"></a>00251 }
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00254"></a>00254 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+<a name="l00255"></a>00255     atomic_backoff b;
+<a name="l00256"></a>00256     T result;
+<a name="l00257"></a>00257     <span class="keywordflow">for</span>(;;) {
+<a name="l00258"></a>00258         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00259"></a>00259         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+<a name="l00260"></a>00260         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result ) 
+<a name="l00261"></a>00261             <span class="keywordflow">break</span>;
+<a name="l00262"></a>00262         b.pause();
+<a name="l00263"></a>00263     }
+<a name="l00264"></a>00264     <span class="keywordflow">return</span> result;
+<a name="l00265"></a>00265 }
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
+<a name="l00268"></a>00268 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
+<a name="l00269"></a>00269 <span class="comment">// arrays of that type can be declared without initializers.  </span>
+<a name="l00270"></a>00270 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
+<a name="l00271"></a>00271 <span class="comment">// to a type bigger than T.</span>
+<a name="l00272"></a>00272 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
+<a name="l00273"></a>00273 <span class="comment">// strictest alignment is 16.</span>
+<a name="l00274"></a>00274 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
+<a name="l00275"></a>00275 <span class="preprocessor"></span>
+<a name="l00276"></a>00276 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
+<a name="l00277"></a>00277 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
+<a name="l00278"></a>00278     <span class="keywordtype">int</span> member[4];
+<a name="l00279"></a>00279 } __attribute__((aligned(16)));
+<a name="l00280"></a>00280 <span class="preprocessor">#elif _MSC_VER</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
+<a name="l00282"></a>00282     <span class="keywordtype">int</span> member[4];
+<a name="l00283"></a>00283 };
+<a name="l00284"></a>00284 <span class="preprocessor">#else</span>
+<a name="l00285"></a>00285 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00287"></a>00287 <span class="preprocessor"></span>
+<a name="l00288"></a>00288 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
+<a name="l00289"></a>00289 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
+<a name="l00290"></a>00290 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
+<a name="l00291"></a>00291 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
+<a name="l00292"></a>00292 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
+<a name="l00293"></a>00293 
+<a name="l00294"></a>00294 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  </span>
+<a name="l00296"></a>00296 <span class="preprocessor"></span>
+<a name="l00298"></a>00298 <span class="preprocessor">template<size_t Size, typename T> </span>
+<a name="l00299"></a><a class="code" href="a00185.html">00299</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00185.html">work_around_alignment_bug</a> {
+<a name="l00300"></a>00300 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00301"></a>00301 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
+<a name="l00302"></a>00302 <span class="preprocessor">#else</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
+<a name="l00304"></a>00304 <span class="preprocessor">#endif</span>
+<a name="l00305"></a>00305 <span class="preprocessor"></span>};
+<a name="l00306"></a>00306 <span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment></span>
+<a name="l00307"></a>00307 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
+<a name="l00308"></a>00308 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00311"></a>00311 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00312"></a>00312 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 } <span class="comment">// namespace internal</span>
+<a name="l00315"></a>00315 } <span class="comment">// namespace tbb</span>
+<a name="l00316"></a>00316 
+<a name="l00317"></a>00317 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span>
+<a name="l00321"></a>00321 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
+<a name="l00323"></a>00323 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span>
+<a name="l00325"></a>00325 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00327"></a>00327 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00328"></a>00328 <span class="preprocessor"></span>
+<a name="l00329"></a>00329 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
+<a name="l00330"></a>00330 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
+<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span>
+<a name="l00333"></a>00333 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
+<a name="l00334"></a>00334 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
+<a name="l00335"></a>00335 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span>
+<a name="l00337"></a>00337 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
+<a name="l00338"></a>00338 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
+<a name="l00339"></a>00339 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00340"></a>00340 <span class="preprocessor"></span>
+<a name="l00341"></a>00341 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
+<a name="l00343"></a>00343 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span>
+<a name="l00345"></a>00345 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
+<a name="l00346"></a>00346 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00347"></a>00347 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00348"></a>00348 <span class="preprocessor"></span>
+<a name="l00349"></a>00349 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
+<a name="l00351"></a>00351 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00352"></a>00352 <span class="preprocessor"></span>
+<a name="l00353"></a>00353 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
+<a name="l00354"></a>00354 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00356"></a>00356 <span class="preprocessor"></span>
+<a name="l00357"></a>00357 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00360"></a>00360 <span class="preprocessor"></span>
+<a name="l00361"></a>00361 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
+<a name="l00363"></a>00363 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00364"></a>00364 <span class="preprocessor"></span>
+<a name="l00365"></a>00365 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
+<a name="l00366"></a>00366 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+<a name="l00367"></a>00367 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00368"></a>00368 <span class="preprocessor"></span>
-<a name="l00369"></a>00369 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
-<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
-<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span>
-<a name="l00379"></a>00379 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
-<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00388"></a>00388 <span class="preprocessor"></span>
-<a name="l00389"></a>00389 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
-<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
-<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
-<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span>
-<a name="l00399"></a>00399 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
-<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
-<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
-<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00408"></a>00408 <span class="preprocessor"></span>
-<a name="l00409"></a>00409 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
-<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
-<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
-<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00418"></a>00418 <span class="preprocessor"></span>
-<a name="l00419"></a>00419 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
-<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
-<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00428"></a>00428 <span class="preprocessor"></span>
-<a name="l00429"></a>00429 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
-<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
-<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00438"></a>00438 <span class="preprocessor"></span>
-<a name="l00439"></a>00439 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
-<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
-<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
-<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00448"></a>00448 <span class="preprocessor"></span>
-<a name="l00449"></a>00449 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00450"></a>00450 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
-<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
-<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00458"></a>00458 <span class="preprocessor"></span>
-<a name="l00459"></a>00459 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00460"></a>00460 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00462"></a>00462 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
-<a name="l00463"></a>00463 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00464"></a>00464 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00465"></a>00465 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
-<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00468"></a>00468 <span class="preprocessor"></span>
-<a name="l00469"></a>00469 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00470"></a>00470 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00472"></a>00472 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
-<a name="l00473"></a>00473 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00474"></a>00474 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
-<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00478"></a>00478 <span class="preprocessor"></span>
-<a name="l00479"></a>00479 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00480"></a>00480 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
-<a name="l00481"></a>00481 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
-<a name="l00483"></a>00483 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00484"></a>00484 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
-<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00488"></a>00488 <span class="preprocessor"></span>
-<a name="l00489"></a>00489 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00369"></a>00369 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span>
+<a name="l00371"></a>00371 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
+<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
+<a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span>
+<a name="l00381"></a>00381 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
+<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
+<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00390"></a>00390 <span class="preprocessor"></span>
+<a name="l00391"></a>00391 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
+<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span>
+<a name="l00401"></a>00401 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
+<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
+<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
+<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00410"></a>00410 <span class="preprocessor"></span>
+<a name="l00411"></a>00411 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
+<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
+<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
+<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00420"></a>00420 <span class="preprocessor"></span>
+<a name="l00421"></a>00421 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
+<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
+<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00429"></a>00429 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00430"></a>00430 <span class="preprocessor"></span>
+<a name="l00431"></a>00431 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
+<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
+<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00440"></a>00440 <span class="preprocessor"></span>
+<a name="l00441"></a>00441 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
+<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
+<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
+<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00449"></a>00449 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00450"></a>00450 <span class="preprocessor"></span>
+<a name="l00451"></a>00451 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
+<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
+<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
+<a name="l00458"></a>00458 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00459"></a>00459 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00460"></a>00460 <span class="preprocessor"></span>
+<a name="l00461"></a>00461 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00462"></a>00462 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
+<a name="l00463"></a>00463 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00464"></a>00464 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
+<a name="l00465"></a>00465 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
+<a name="l00468"></a>00468 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00469"></a>00469 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00470"></a>00470 <span class="preprocessor"></span>
+<a name="l00471"></a>00471 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00472"></a>00472 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
+<a name="l00473"></a>00473 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00474"></a>00474 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
+<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00479"></a>00479 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00480"></a>00480 <span class="preprocessor"></span>
+<a name="l00481"></a>00481 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
+<a name="l00483"></a>00483 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00484"></a>00484 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
+<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
+<a name="l00488"></a>00488 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00489"></a>00489 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00490"></a>00490 <span class="preprocessor"></span>
-<a name="l00491"></a>00491 <span class="comment">// Special atomic functions</span>
-<a name="l00492"></a>00492 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
-<a name="l00493"></a>00493 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
-<a name="l00494"></a>00494 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span>
-<a name="l00496"></a>00496 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
-<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
-<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00499"></a>00499 <span class="preprocessor"></span>
-<a name="l00500"></a>00500 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
-<a name="l00502"></a>00502 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00503"></a>00503 <span class="preprocessor"></span>
-<a name="l00504"></a>00504 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
-<a name="l00505"></a>00505 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
-<a name="l00506"></a>00506 <span class="preprocessor">#ifndef __TBB_Store8</span>
-<a name="l00507"></a>00507 <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) {
-<a name="l00508"></a>00508     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00509"></a>00509     <span class="keywordflow">for</span>(;;) {
-<a name="l00510"></a>00510         int64_t result = *(int64_t *)ptr;
-<a name="l00511"></a>00511         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
-<a name="l00512"></a>00512         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00513"></a>00513     }
-<a name="l00514"></a>00514 }
-<a name="l00515"></a>00515 <span class="preprocessor">#endif</span>
-<a name="l00516"></a>00516 <span class="preprocessor"></span>
-<a name="l00517"></a>00517 <span class="preprocessor">#ifndef __TBB_Load8</span>
-<a name="l00518"></a>00518 <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) {
-<a name="l00519"></a>00519     int64_t result = *(int64_t *)ptr;
-<a name="l00520"></a>00520     result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
-<a name="l00521"></a>00521     <span class="keywordflow">return</span> result;
-<a name="l00522"></a>00522 }
-<a name="l00523"></a>00523 <span class="preprocessor">#endif</span>
-<a name="l00524"></a>00524 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00525"></a>00525 
-<a name="l00526"></a>00526 <span class="preprocessor">#ifndef __TBB_Log2</span>
-<a name="l00527"></a>00527 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
-<a name="l00528"></a>00528     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
-<a name="l00529"></a>00529     intptr_t result = 0;
-<a name="l00530"></a>00530     uintptr_t tmp;
-<a name="l00531"></a>00531 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
-<a name="l00532"></a>00532 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
-<a name="l00533"></a>00533 <span class="preprocessor">#endif</span>
-<a name="l00534"></a>00534 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
-<a name="l00535"></a>00535     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
-<a name="l00536"></a>00536     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
-<a name="l00537"></a>00537     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
-<a name="l00538"></a>00538     <span class="keywordflow">return</span> (x&2)? result+1: result;
-<a name="l00539"></a>00539 }
-<a name="l00540"></a>00540 <span class="preprocessor">#endif</span>
-<a name="l00541"></a>00541 <span class="preprocessor"></span>
-<a name="l00542"></a>00542 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
-<a name="l00543"></a>00543 <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 ) {
-<a name="l00544"></a>00544     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00545"></a>00545     <span class="keywordflow">for</span>(;;) {
-<a name="l00546"></a>00546         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00547"></a>00547         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
-<a name="l00548"></a>00548         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00549"></a>00549         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00550"></a>00550     }
-<a name="l00551"></a>00551 }
-<a name="l00552"></a>00552 <span class="preprocessor">#endif</span>
-<a name="l00553"></a>00553 <span class="preprocessor"></span>
-<a name="l00554"></a>00554 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
-<a name="l00555"></a>00555 <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 ) {
-<a name="l00556"></a>00556     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00557"></a>00557     <span class="keywordflow">for</span>(;;) {
-<a name="l00558"></a>00558         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00559"></a>00559         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
-<a name="l00560"></a>00560         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00561"></a>00561         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00562"></a>00562     }
-<a name="l00563"></a>00563 }
-<a name="l00564"></a>00564 <span class="preprocessor">#endif</span>
-<a name="l00565"></a>00565 <span class="preprocessor"></span>
-<a name="l00566"></a>00566 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
-<a name="l00567"></a>00567 <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 ) {
-<a name="l00568"></a>00568     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
-<a name="l00569"></a>00569 }
-<a name="l00570"></a>00570 <span class="preprocessor">#endif</span>
-<a name="l00571"></a>00571 <span class="preprocessor"></span>
-<a name="l00572"></a>00572 <span class="preprocessor">#ifndef __TBB_LockByte</span>
-<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& flag ) {
-<a name="l00574"></a>00574     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
-<a name="l00575"></a>00575         <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00576"></a>00576         <span class="keywordflow">do</span> {
-<a name="l00577"></a>00577             b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00578"></a>00578         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
-<a name="l00579"></a>00579     }
-<a name="l00580"></a>00580     <span class="keywordflow">return</span> 0;
-<a name="l00581"></a>00581 }
-<a name="l00582"></a>00582 <span class="preprocessor">#endif</span>
-<a name="l00583"></a>00583 <span class="preprocessor"></span>
-<a name="l00584"></a>00584 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
+<a name="l00491"></a>00491 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00492"></a>00492 <span class="preprocessor"></span>
+<a name="l00493"></a>00493 <span class="comment">// Special atomic functions</span>
+<a name="l00494"></a>00494 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
+<a name="l00495"></a>00495 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
+<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span>
+<a name="l00498"></a>00498 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
+<a name="l00499"></a>00499 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
+<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span>
+<a name="l00502"></a>00502 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
+<a name="l00503"></a>00503 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
+<a name="l00504"></a>00504 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00505"></a>00505 <span class="preprocessor"></span>
+<a name="l00506"></a>00506 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
+<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
+<a name="l00508"></a>00508 <span class="preprocessor">#ifndef __TBB_Store8</span>
+<a name="l00509"></a>00509 <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) {
+<a name="l00510"></a>00510     <a class="code" href="a00124.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00511"></a>00511     <span class="keywordflow">for</span>(;;) {
+<a name="l00512"></a>00512         int64_t result = *(int64_t *)ptr;
+<a name="l00513"></a>00513         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
+<a name="l00514"></a>00514         b.<a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00515"></a>00515     }
+<a name="l00516"></a>00516 }
+<a name="l00517"></a>00517 <span class="preprocessor">#endif</span>
+<a name="l00518"></a>00518 <span class="preprocessor"></span>
+<a name="l00519"></a>00519 <span class="preprocessor">#ifndef __TBB_Load8</span>
+<a name="l00520"></a>00520 <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) {
+<a name="l00521"></a>00521     int64_t result = *(int64_t *)ptr;
+<a name="l00522"></a>00522     result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
+<a name="l00523"></a>00523     <span class="keywordflow">return</span> result;
+<a name="l00524"></a>00524 }
+<a name="l00525"></a>00525 <span class="preprocessor">#endif</span>
+<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00527"></a>00527 
+<a name="l00528"></a>00528 <span class="preprocessor">#ifndef __TBB_Log2</span>
+<a name="l00529"></a>00529 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
+<a name="l00530"></a>00530     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
+<a name="l00531"></a>00531     intptr_t result = 0;
+<a name="l00532"></a>00532     uintptr_t tmp;
+<a name="l00533"></a>00533 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
+<a name="l00534"></a>00534 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
+<a name="l00535"></a>00535 <span class="preprocessor">#endif</span>
+<a name="l00536"></a>00536 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
+<a name="l00537"></a>00537     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
+<a name="l00538"></a>00538     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
+<a name="l00539"></a>00539     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
+<a name="l00540"></a>00540     <span class="keywordflow">return</span> (x&2)? result+1: result;
+<a name="l00541"></a>00541 }
+<a name="l00542"></a>00542 <span class="preprocessor">#endif</span>
+<a name="l00543"></a>00543 <span class="preprocessor"></span>
+<a name="l00544"></a>00544 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
+<a name="l00545"></a>00545 <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 ) {
+<a name="l00546"></a>00546     <a class="code" href="a00124.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00547"></a>00547     <span class="keywordflow">for</span>(;;) {
+<a name="l00548"></a>00548         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00549"></a>00549         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+<a name="l00550"></a>00550         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00551"></a>00551         b.<a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00552"></a>00552     }
+<a name="l00553"></a>00553 }
+<a name="l00554"></a>00554 <span class="preprocessor">#endif</span>
+<a name="l00555"></a>00555 <span class="preprocessor"></span>
+<a name="l00556"></a>00556 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
+<a name="l00557"></a>00557 <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 ) {
+<a name="l00558"></a>00558     <a class="code" href="a00124.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00559"></a>00559     <span class="keywordflow">for</span>(;;) {
+<a name="l00560"></a>00560         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00561"></a>00561         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
+<a name="l00562"></a>00562         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00563"></a>00563         b.<a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00564"></a>00564     }
+<a name="l00565"></a>00565 }
+<a name="l00566"></a>00566 <span class="preprocessor">#endif</span>
+<a name="l00567"></a>00567 <span class="preprocessor"></span>
+<a name="l00568"></a>00568 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
+<a name="l00569"></a>00569 <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 ) {
+<a name="l00570"></a>00570     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
+<a name="l00571"></a>00571 }
+<a name="l00572"></a>00572 <span class="preprocessor">#endif</span>
+<a name="l00573"></a>00573 <span class="preprocessor"></span>
+<a name="l00574"></a>00574 <span class="preprocessor">#ifndef __TBB_LockByte</span>
+<a name="l00575"></a>00575 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& flag ) {
+<a name="l00576"></a>00576     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
+<a name="l00577"></a>00577         <a class="code" href="a00124.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00578"></a>00578         <span class="keywordflow">do</span> {
+<a name="l00579"></a>00579             b.<a class="code" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00580"></a>00580         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
+<a name="l00581"></a>00581     }
+<a name="l00582"></a>00582     <span class="keywordflow">return</span> 0;
+<a name="l00583"></a>00583 }
+<a name="l00584"></a>00584 <span class="preprocessor">#endif</span>
+<a name="l00585"></a>00585 <span class="preprocessor"></span>
+<a name="l00586"></a>00586 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00385.html b/doc/html/a00397.html
similarity index 99%
rename from doc/html/a00385.html
rename to doc/html/a00397.html
index 34ef897..4ecd6ee 100644
--- a/doc/html/a00385.html
+++ b/doc/html/a00397.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_profiling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
diff --git a/doc/html/a00386.html b/doc/html/a00398.html
similarity index 96%
copy from doc/html/a00386.html
copy to doc/html/a00398.html
index d064ee1..8df7505 100644
--- a/doc/html/a00386.html
+++ b/doc/html/a00398.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_stddef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -47,7 +47,7 @@
 <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 2</span>
 <a name="l00027"></a>00027 <span class="preprocessor"></span>
 <a name="l00028"></a>00028 <span class="comment">// Engineering-focused interface version</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 4001</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 4003</span>
 <a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000</span>
 <a name="l00031"></a>00031 <span class="preprocessor"></span>
 <a name="l00032"></a>00032 <span class="comment">// The oldest major interface version still supported</span>
@@ -123,7 +123,7 @@
 <a name="l00152"></a>00152 <span class="preprocessor">#include "tbb_config.h"</span>
 <a name="l00153"></a>00153 
 <a name="l00154"></a>00154 <span class="keyword">namespace </span>tbb {
-<a name="l00156"></a><a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">00156</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a>)( <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> < [...]
+<a name="l00156"></a><a class="code" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">00156</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a>)( <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> < [...]
 <a name="l00157"></a>00157 }
 <a name="l00158"></a>00158 
 <a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
@@ -133,10 +133,10 @@
 <a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
 <a name="l00167"></a>00167 <span class="preprocessor"></span>
 <a name="l00168"></a>00168 <span class="keyword">namespace </span>tbb {
-<a name="l00170"></a>00170     <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
+<a name="l00170"></a>00170     <a class="code" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00237.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
 <a name="l00171"></a>00171 
 <a name="l00173"></a>00173 
-<a name="l00176"></a>00176     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a>( <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 );
+<a name="l00176"></a>00176     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00237.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a>( <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 );
 <a name="l00177"></a>00177 } <span class="comment">// namespace tbb</span>
 <a name="l00178"></a>00178 
 <a name="l00179"></a>00179 <span class="preprocessor">#else</span>
@@ -149,10 +149,10 @@
 <a name="l00189"></a>00189 <span class="keyword">namespace </span>tbb {
 <a name="l00190"></a>00190 
 <a name="l00192"></a>00192 
-<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
+<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00237.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
 <a name="l00197"></a>00197 
 <a name="l00199"></a>00199 
-<a name="l00203"></a><a class="code" href="a00165.html">00203</a> <span class="keyword">class </span><a class="code" href="a00165.html">split</a> {
+<a name="l00203"></a><a class="code" href="a00173.html">00203</a> <span class="keyword">class </span><a class="code" href="a00173.html">split</a> {
 <a name="l00204"></a>00204 };
 <a name="l00205"></a>00205 
 <a name="l00210"></a>00210 <span class="keyword">namespace </span>internal {
diff --git a/doc/html/a00391.html b/doc/html/a00403.html
similarity index 75%
copy from doc/html/a00391.html
copy to doc/html/a00403.html
index 18637fa..6f2bbeb 100644
--- a/doc/html/a00391.html
+++ b/doc/html/a00403.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbb_thread.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -163,130 +163,131 @@
 <a name="l00153"></a>00153 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
 <a name="l00154"></a>00154 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
 <a name="l00155"></a>00155         }
-<a name="l00156"></a>00156         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
-<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
-<a name="l00160"></a>00160         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
-<a name="l00161"></a>00161         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
-<a name="l00162"></a>00162         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
-<a name="l00163"></a>00163         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
-<a name="l00164"></a>00164     
-<a name="l00166"></a>00166         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
-<a name="l00167"></a>00167     <span class="keyword">private</span>:
-<a name="l00168"></a>00168         native_handle_type my_handle; 
-<a name="l00169"></a>00169 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span>        DWORD my_thread_id;
-<a name="l00171"></a>00171 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span>
-<a name="l00174"></a>00174         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
-<a name="l00175"></a>00175                              <span class="keywordtype">void</span>* closure );
-<a name="l00176"></a>00176         <span class="keyword">friend</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
-<a name="l00178"></a>00178     };
-<a name="l00179"></a>00179         
-<a name="l00180"></a>00180     <span class="keyword">class </span>tbb_thread_v3::id { 
-<a name="l00181"></a>00181 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>        DWORD my_id;
-<a name="l00183"></a>00183         id( DWORD my_id ) : my_id(my_id) {}
-<a name="l00184"></a>00184 <span class="preprocessor">#else</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span>        pthread_t my_id;
-<a name="l00186"></a>00186         id( pthread_t my_id ) : my_id(my_id) {}
-<a name="l00187"></a>00187 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00189"></a>00189     <span class="keyword">public</span>:
-<a name="l00190"></a>00190         id() : my_id(0) {}
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00193"></a>00193         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00194"></a>00194         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00195"></a>00195         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00196"></a>00196         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00197"></a>00197         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00198"></a>00198         
-<a name="l00199"></a>00199         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
-<a name="l00200"></a>00200         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
-<a name="l00201"></a>00201         operator<< (std::basic_ostream<charT, traits> &out, 
-<a name="l00202"></a>00202                     tbb_thread_v3::id id)
-<a name="l00203"></a>00203         {
-<a name="l00204"></a>00204             out << <span class="keywordtype">id</span>.my_id;
-<a name="l00205"></a>00205             <span class="keywordflow">return</span> out;
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00208"></a>00208     }; <span class="comment">// tbb_thread_v3::id</span>
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
-<a name="l00211"></a>00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
-<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
-<a name="l00215"></a>00215 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>    }
-<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00218"></a>00218     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00219"></a>00219     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
-<a name="l00220"></a>00220     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00223"></a>00223     {
-<a name="l00224"></a>00224         <span class="keywordflow">return</span> x.my_id == y.my_id;
-<a name="l00225"></a>00225     }
-<a name="l00226"></a>00226     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00227"></a>00227     {
-<a name="l00228"></a>00228         <span class="keywordflow">return</span> x.my_id != y.my_id;
-<a name="l00229"></a>00229     }
-<a name="l00230"></a>00230     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00231"></a>00231     {
-<a name="l00232"></a>00232         <span class="keywordflow">return</span> x.my_id < y.my_id;
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00235"></a>00235     {
-<a name="l00236"></a>00236         <span class="keywordflow">return</span> x.my_id <= y.my_id;
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00239"></a>00239     {
-<a name="l00240"></a>00240         <span class="keywordflow">return</span> x.my_id > y.my_id;
-<a name="l00241"></a>00241     }
-<a name="l00242"></a>00242     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00243"></a>00243     {
-<a name="l00244"></a>00244         <span class="keywordflow">return</span> x.my_id >= y.my_id;
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 } <span class="comment">// namespace internal;</span>
-<a name="l00248"></a>00248 
-<a name="l00250"></a>00250 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="keyword">using</span> internal::operator==;
-<a name="l00253"></a>00253 <span class="keyword">using</span> internal::operator!=;
-<a name="l00254"></a>00254 <span class="keyword">using</span> internal::operator<;
-<a name="l00255"></a>00255 <span class="keyword">using</span> internal::operator>;
-<a name="l00256"></a>00256 <span class="keyword">using</span> internal::operator<=;
-<a name="l00257"></a>00257 <span class="keyword">using</span> internal::operator>=;
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
-<a name="l00260"></a>00260     internal::move_v3(t1, t2);
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
-<a name="l00264"></a>00264     tbb::tbb_thread::native_handle_type h = t1.my_handle;
-<a name="l00265"></a>00265     t1.my_handle = t2.my_handle;
-<a name="l00266"></a>00266     t2.my_handle = h;
-<a name="l00267"></a>00267 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00268"></a>00268 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
-<a name="l00269"></a>00269     t1.my_thread_id = t2.my_thread_id;
-<a name="l00270"></a>00270     t2.my_thread_id = i;
-<a name="l00271"></a>00271 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00272"></a>00272 }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 <span class="keyword">namespace </span>this_tbb_thread {
-<a name="l00275"></a>00275     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
-<a name="l00277"></a>00277     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
-<a name="l00279"></a>00279     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
-<a name="l00280"></a>00280         internal::thread_sleep_v3(i);  
-<a name="l00281"></a>00281     }
-<a name="l00282"></a>00282 }  <span class="comment">// namespace this_tbb_thread</span>
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 } <span class="comment">// namespace tbb</span>
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+<a name="l00156"></a>00156         <span class="keywordtype">void</span> swap( tbb_thread_v3& t ) {tbb::swap( *<span class="keyword">this</span>, t );}
+<a name="l00157"></a>00157         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
+<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
+<a name="l00161"></a>00161         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
+<a name="l00162"></a>00162         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
+<a name="l00163"></a>00163         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
+<a name="l00164"></a>00164         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
+<a name="l00165"></a>00165     
+<a name="l00167"></a>00167         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
+<a name="l00168"></a>00168     <span class="keyword">private</span>:
+<a name="l00169"></a>00169         native_handle_type my_handle; 
+<a name="l00170"></a>00170 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>        DWORD my_thread_id;
+<a name="l00172"></a>00172 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>
+<a name="l00175"></a>00175         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
+<a name="l00176"></a>00176                              <span class="keywordtype">void</span>* closure );
+<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+<a name="l00178"></a>00178         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
+<a name="l00179"></a>00179     };
+<a name="l00180"></a>00180         
+<a name="l00181"></a>00181     <span class="keyword">class </span>tbb_thread_v3::id { 
+<a name="l00182"></a>00182 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span>        DWORD my_id;
+<a name="l00184"></a>00184         id( DWORD my_id ) : my_id(my_id) {}
+<a name="l00185"></a>00185 <span class="preprocessor">#else</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>        pthread_t my_id;
+<a name="l00187"></a>00187         id( pthread_t my_id ) : my_id(my_id) {}
+<a name="l00188"></a>00188 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
+<a name="l00190"></a>00190     <span class="keyword">public</span>:
+<a name="l00191"></a>00191         id() : my_id(0) {}
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00194"></a>00194         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00195"></a>00195         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00196"></a>00196         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00197"></a>00197         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00198"></a>00198         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00199"></a>00199         
+<a name="l00200"></a>00200         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
+<a name="l00201"></a>00201         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
+<a name="l00202"></a>00202         operator<< (std::basic_ostream<charT, traits> &out, 
+<a name="l00203"></a>00203                     tbb_thread_v3::id id)
+<a name="l00204"></a>00204         {
+<a name="l00205"></a>00205             out << <span class="keywordtype">id</span>.my_id;
+<a name="l00206"></a>00206             <span class="keywordflow">return</span> out;
+<a name="l00207"></a>00207         }
+<a name="l00208"></a>00208         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00209"></a>00209     }; <span class="comment">// tbb_thread_v3::id</span>
+<a name="l00210"></a>00210 
+<a name="l00211"></a>00211     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
+<a name="l00212"></a>00212 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
+<a name="l00214"></a>00214 <span class="preprocessor">#else</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
+<a name="l00216"></a>00216 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span>    }
+<a name="l00218"></a>00218     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+<a name="l00219"></a>00219     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00220"></a>00220     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
+<a name="l00221"></a>00221     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00224"></a>00224     {
+<a name="l00225"></a>00225         <span class="keywordflow">return</span> x.my_id == y.my_id;
+<a name="l00226"></a>00226     }
+<a name="l00227"></a>00227     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00228"></a>00228     {
+<a name="l00229"></a>00229         <span class="keywordflow">return</span> x.my_id != y.my_id;
+<a name="l00230"></a>00230     }
+<a name="l00231"></a>00231     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00232"></a>00232     {
+<a name="l00233"></a>00233         <span class="keywordflow">return</span> x.my_id < y.my_id;
+<a name="l00234"></a>00234     }
+<a name="l00235"></a>00235     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00236"></a>00236     {
+<a name="l00237"></a>00237         <span class="keywordflow">return</span> x.my_id <= y.my_id;
+<a name="l00238"></a>00238     }
+<a name="l00239"></a>00239     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00240"></a>00240     {
+<a name="l00241"></a>00241         <span class="keywordflow">return</span> x.my_id > y.my_id;
+<a name="l00242"></a>00242     }
+<a name="l00243"></a>00243     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00244"></a>00244     {
+<a name="l00245"></a>00245         <span class="keywordflow">return</span> x.my_id >= y.my_id;
+<a name="l00246"></a>00246     }
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248 } <span class="comment">// namespace internal;</span>
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253 <span class="keyword">using</span> internal::operator==;
+<a name="l00254"></a>00254 <span class="keyword">using</span> internal::operator!=;
+<a name="l00255"></a>00255 <span class="keyword">using</span> internal::operator<;
+<a name="l00256"></a>00256 <span class="keyword">using</span> internal::operator>;
+<a name="l00257"></a>00257 <span class="keyword">using</span> internal::operator<=;
+<a name="l00258"></a>00258 <span class="keyword">using</span> internal::operator>=;
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
+<a name="l00261"></a>00261     internal::move_v3(t1, t2);
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
+<a name="l00265"></a>00265     tbb::tbb_thread::native_handle_type h = t1.my_handle;
+<a name="l00266"></a>00266     t1.my_handle = t2.my_handle;
+<a name="l00267"></a>00267     t2.my_handle = h;
+<a name="l00268"></a>00268 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00269"></a>00269 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
+<a name="l00270"></a>00270     t1.my_thread_id = t2.my_thread_id;
+<a name="l00271"></a>00271     t2.my_thread_id = i;
+<a name="l00272"></a>00272 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00273"></a>00273 }
+<a name="l00274"></a>00274 
+<a name="l00275"></a>00275 <span class="keyword">namespace </span>this_tbb_thread {
+<a name="l00276"></a>00276     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
+<a name="l00278"></a>00278     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
+<a name="l00280"></a>00280     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
+<a name="l00281"></a>00281         internal::thread_sleep_v3(i);  
+<a name="l00282"></a>00282     }
+<a name="l00283"></a>00283 }  <span class="comment">// namespace this_tbb_thread</span>
+<a name="l00284"></a>00284 
+<a name="l00285"></a>00285 } <span class="comment">// namespace tbb</span>
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00399.html b/doc/html/a00411.html
similarity index 99%
rename from doc/html/a00399.html
rename to doc/html/a00411.html
index ab1f0b2..7df1b4d 100644
--- a/doc/html/a00399.html
+++ b/doc/html/a00411.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tbbmalloc_proxy.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
diff --git a/doc/html/a00401.html b/doc/html/a00413.html
similarity index 75%
rename from doc/html/a00401.html
rename to doc/html/a00413.html
index a7f80c1..b74c274 100644
--- a/doc/html/a00401.html
+++ b/doc/html/a00413.html
@@ -20,7 +20,7 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>tick_count.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.</span>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
 <a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -55,51 +55,51 @@
 <a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb {
 <a name="l00035"></a>00035 
 <a name="l00037"></a>00037 
-<a name="l00038"></a><a class="code" href="a00176.html">00038</a> <span class="keyword">class </span><a class="code" href="a00176.html">tick_count</a> {
+<a name="l00038"></a><a class="code" href="a00183.html">00038</a> <span class="keyword">class </span><a class="code" href="a00183.html">tick_count</a> {
 <a name="l00039"></a>00039 <span class="keyword">public</span>:
-<a name="l00041"></a><a class="code" href="a00177.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00177.html">interval_t</a> {
+<a name="l00041"></a><a class="code" href="a00184.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00184.html">interval_t</a> {
 <a name="l00042"></a>00042         <span class="keywordtype">long</span> <span class="keywordtype">long</span> value;
-<a name="l00043"></a>00043         <span class="keyword">explicit</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">long</span> <span class="keywordtype">long</span> value_ ) : value(value_) {}
+<a name="l00043"></a>00043         <span class="keyword">explicit</span> <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">long</span> <span class="keywordtype">long</span> value_ ) : value(value_) {}
 <a name="l00044"></a>00044     <span class="keyword">public</span>:
-<a name="l00046"></a><a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>() : value(0) {};
+<a name="l00046"></a><a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>() : value(0) {};
 <a name="l00047"></a>00047 
-<a name="l00049"></a>00049         <span class="keyword">explicit</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">double</span> sec );
+<a name="l00049"></a>00049         <span class="keyword">explicit</span> <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">double</span> sec );
 <a name="l00050"></a>00050 
-<a name="l00052"></a>00052         <span class="keywordtype">double</span> <a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() <span class="keyword">const</span>;
+<a name="l00052"></a>00052         <span class="keywordtype">double</span> <a class="code" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() <span class="keyword">const</span>;
 <a name="l00053"></a>00053 
-<a name="l00054"></a>00054         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00176.html">tbb::tick_count</a>;
+<a name="l00054"></a>00054         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00183.html">tbb::tick_count</a>;
 <a name="l00055"></a>00055 
-<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t0 );
+<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00184.html">interval_t</a> <a class="code" href="a00184.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t0 );
 <a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00177.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& j ) {
-<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00060"></a><a class="code" href="a00184.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00184.html">interval_t</a> <a class="code" href="a00184.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& j ) {
+<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
 <a name="l00062"></a>00062         }
 <a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00177.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& j ) {
-<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00065"></a><a class="code" href="a00184.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00184.html">interval_t</a> <a class="code" href="a00184.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& j ) {
+<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
 <a name="l00067"></a>00067         }
 <a name="l00068"></a>00068 
-<a name="l00070"></a><a class="code" href="a00177.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00177.html">interval_t</a>& <a class="code" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& i ) {value += i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword [...]
+<a name="l00070"></a><a class="code" href="a00184.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00184.html">interval_t</a>& <a class="code" href="a00184.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& i ) {value += i.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword [...]
 <a name="l00071"></a>00071 
-<a name="l00073"></a><a class="code" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00177.html">interval_t</a>& <a class="code" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword [...]
+<a name="l00073"></a><a class="code" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00184.html">interval_t</a>& <a class="code" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00184.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00184.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword [...]
 <a name="l00074"></a>00074     };
 <a name="l00075"></a>00075     
-<a name="l00077"></a><a class="code" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>() : my_count(0) {};
+<a name="l00077"></a><a class="code" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>() : my_count(0) {};
 <a name="l00078"></a>00078 
-<a name="l00080"></a>00080     <span class="keyword">static</span> <a class="code" href="a00176.html">tick_count</a> <a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a>();
+<a name="l00080"></a>00080     <span class="keyword">static</span> <a class="code" href="a00183.html">tick_count</a> <a class="code" href="a00183.html#fb7f78ca61cf28398645ace66e284473">now</a>();
 <a name="l00081"></a>00081     
-<a name="l00083"></a>00083     <span class="keyword">friend</span> interval_t <a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t0 );
+<a name="l00083"></a>00083     <span class="keyword">friend</span> interval_t <a class="code" href="a00183.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t0 );
 <a name="l00084"></a>00084 
 <a name="l00085"></a>00085 <span class="keyword">private</span>:
 <a name="l00086"></a>00086     <span class="keywordtype">long</span> <span class="keywordtype">long</span> my_count;
 <a name="l00087"></a>00087 };
 <a name="l00088"></a>00088 
-<a name="l00089"></a><a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00176.html">tick_count</a> <a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
-<a name="l00090"></a>00090     <a class="code" href="a00176.html">tick_count</a> result;
+<a name="l00089"></a><a class="code" href="a00183.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00183.html">tick_count</a> <a class="code" href="a00183.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
+<a name="l00090"></a>00090     <a class="code" href="a00183.html">tick_count</a> result;
 <a name="l00091"></a>00091 <span class="preprocessor">#if _WIN32||_WIN64</span>
 <a name="l00092"></a>00092 <span class="preprocessor"></span>    LARGE_INTEGER qpcnt;
 <a name="l00093"></a>00093     QueryPerformanceCounter(&qpcnt);
-<a name="l00094"></a>00094     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = qpcnt.QuadPart;
+<a name="l00094"></a>00094     result.<a class="code" href="a00183.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = qpcnt.QuadPart;
 <a name="l00095"></a>00095 <span class="preprocessor">#elif __linux__</span>
 <a name="l00096"></a>00096 <span class="preprocessor"></span>    <span class="keyword">struct </span>timespec ts;
 <a name="l00097"></a>00097 <span class="preprocessor">#if TBB_USE_ASSERT</span>
@@ -107,7 +107,7 @@
 <a name="l00099"></a>00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
 <a name="l00100"></a>00100         clock_gettime( CLOCK_REALTIME, &ts );
 <a name="l00101"></a>00101     __TBB_ASSERT( status==0, <span class="stringliteral">"CLOCK_REALTIME not supported"</span> );
-<a name="l00102"></a>00102     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
+<a name="l00102"></a>00102     result.<a class="code" href="a00183.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
 <a name="l00103"></a>00103 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
 <a name="l00104"></a>00104     <span class="keyword">struct </span>timeval tv;
 <a name="l00105"></a>00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
@@ -115,12 +115,12 @@
 <a name="l00107"></a>00107 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
 <a name="l00108"></a>00108         gettimeofday(&tv, NULL);
 <a name="l00109"></a>00109     __TBB_ASSERT( status==0, <span class="stringliteral">"gettimeofday failed"</span> );
-<a name="l00110"></a>00110     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
+<a name="l00110"></a>00110     result.<a class="code" href="a00183.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
 <a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/*(choice of OS) */</span>
 <a name="l00112"></a>00112     <span class="keywordflow">return</span> result;
 <a name="l00113"></a>00113 }
 <a name="l00114"></a>00114 
-<a name="l00115"></a><a class="code" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">tick_count::interval_t::interval_t</a>( <span class="keywordtype">double</span> sec )
+<a name="l00115"></a><a class="code" href="a00184.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00184.html#75a9a0949f8a8a84d6758835f1b48dad">tick_count::interval_t::interval_t</a>( <span class="keywordtype">double</span> sec )
 <a name="l00116"></a>00116 {
 <a name="l00117"></a>00117 <span class="preprocessor">#if _WIN32||_WIN64</span>
 <a name="l00118"></a>00118 <span class="preprocessor"></span>    LARGE_INTEGER qpfreq;
@@ -133,11 +133,11 @@
 <a name="l00125"></a>00125 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
 <a name="l00126"></a>00126 }
 <a name="l00127"></a>00127 
-<a name="l00128"></a><a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00177.html">tick_count::interval_t</a> <a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>& t0 ) {
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00177.html">tick_count::interval_t</a>( t1.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
+<a name="l00128"></a><a class="code" href="a00183.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00184.html">tick_count::interval_t</a> <a class="code" href="a00183.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00183.html">tick_count</a>& t0 ) {
+<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00184.html">tick_count::interval_t</a>( t1.<a class="code" href="a00183.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00183.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
 <a name="l00130"></a>00130 }
 <a name="l00131"></a>00131 
-<a name="l00132"></a><a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tick_count::interval_t::seconds</a>()<span class="keyword"> const </span>{
+<a name="l00132"></a><a class="code" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">tick_count::interval_t::seconds</a>()<span class="keyword"> const </span>{
 <a name="l00133"></a>00133 <span class="preprocessor">#if _WIN32||_WIN64</span>
 <a name="l00134"></a>00134 <span class="preprocessor"></span>    LARGE_INTEGER qpfreq;
 <a name="l00135"></a>00135     QueryPerformanceFrequency(&qpfreq);
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index 5d0c760..4ed86df 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -21,72 +21,74 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
-  <tr><td class="indexkey"><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00116.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="a00117.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00118.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00118.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td class="indexvalue">Class that implements exponential backoff </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00121.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00122.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="a00123.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="a00124.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="a00125.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="a00126.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="a00127.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="a00128.html">tbb::combinable< T ></a></td><td class="indexvalue">Thread-local storage with optional reduction </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td class="indexvalue">Unordered map from Key to T </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::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="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td class="indexvalue">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td class="indexvalue">Combines data access, locking, and garbage collection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe non-blocking concurrent queue </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00137.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="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The thread local class template </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00139.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00140.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="a00141.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="a00142.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="a00143.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00144.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td class="indexvalue">A rw mutex which does nothing </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00148.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="a00149.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="a00150.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="a00151.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="a00152.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="a00153.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="a00154.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="a00155.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="a00156.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="a00157.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="a00158.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="a00159.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="a00160.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00161.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="a00162.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="a00163.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="a00164.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="a00165.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="a00166.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00167.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="a00168.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00169.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="a00170.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="a00171.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="a00172.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="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td class="indexvalue">Exception container that preserves the exact copy of the original exception </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00174.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="a00175.html">tbb::thread_bound_filter</a></td><td class="indexvalue">A stage in a pipeline served by a user thread </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00176.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00178.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>
-  <tr><td class="indexkey"><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></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="a00180.html">tbb::zero_allocator< void, Allocator ></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="a00120.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00121.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="a00122.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00123.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00123.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a></td><td class="indexvalue">Class that implements exponential backoff </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00125.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00126.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00127.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="a00128.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="a00129.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="a00130.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="a00131.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="a00132.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="a00133.html">tbb::combinable< T ></a></td><td class="indexvalue">Thread-local storage with optional reduction </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td class="indexvalue">Unordered map from Key to T </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::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="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td class="indexvalue">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td class="indexvalue">Combines data access, locking, and garbage collection </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe non-blocking concurrent queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00142.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="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The thread local class template </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00144.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00145.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="a00146.html">tbb::improper_lock</a></td><td class="indexvalue">Exception for PPL locks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00147.html">tbb::invalid_multiple_scheduling</a></td><td class="indexvalue">Exception for repeated scheduling of the same task_handle </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00148.html">tbb::missing_wait</a></td><td class="indexvalue">Exception for missing wait on structured_task_group </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00149.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="a00150.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="a00151.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00152.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00154.html">tbb::null_rw_mutex</a></td><td class="indexvalue">A rw mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00156.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="a00157.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="a00158.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="a00159.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="a00160.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="a00161.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="a00162.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="a00163.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="a00164.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="a00165.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="a00166.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="a00167.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="a00168.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00169.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="a00170.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="a00171.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="a00172.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="a00173.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="a00174.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00175.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="a00176.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00177.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="a00178.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="a00179.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="a00180.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="a00181.html">tbb::internal::tbb_exception_ptr</a></td><td class="indexvalue">Exception container that preserves the exact copy of the original exception </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00182.html">tbb::thread_bound_filter</a></td><td class="indexvalue">A stage in a pipeline served by a user thread </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00183.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00184.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00185.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>
+  <tr><td class="indexkey"><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></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="a00187.html">tbb::zero_allocator< void, Allocator ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html
index 4edaa4c..ed3cb23 100644
--- a/doc/html/deprecated.html
+++ b/doc/html/deprecated.html
@@ -15,12 +15,12 @@
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
 <h1><a class="anchor" name="deprecated">Deprecated List</a></h1><a class="anchor" name="_deprecated000001"></a> <dl>
-<dt>Member <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
+<dt>Member <a class="el" href="a00140.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
 <dd>Use try_pop() </dd>
 </dl>
 <p>
 <a class="anchor" name="_deprecated000002"></a> <dl>
-<dt>Member <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter::serial</a>  </dt>
+<dt>Member <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter::serial</a>  </dt>
 <dd>use serial_in_order instead </dd>
 </dl>
 <hr>
diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/doc/html/doxygen.png differ
diff --git a/doc/html/files.html b/doc/html/files.html
index 868637c..49fabc6 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -20,53 +20,54 @@
     <li><a href="globals.html"><span>File Members</span></a></li>
   </ul></div>
 <h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
-  <tr><td class="indexkey"><b>_concurrent_queue_internal.h</b> <a href="a00239.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00255.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00257.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00258.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00266.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00267.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00268.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00269.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00271.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00272.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00282.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00283.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00292.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00300.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00302.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00303.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00304.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00313.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00317.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00319.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00325.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00329.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00334.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00338.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00342.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00347.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00348.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00349.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00350.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00210.html">scalable_allocator.h</a> <a href="a00351.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00352.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00353.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task.h</b> <a href="a00354.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00363.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00371.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00372.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00374.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00375.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00379.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config_lrb.h</b> <a href="a00380.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00381.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00382.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00385.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00386.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00391.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00399.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00401.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_concurrent_queue_internal.h</b> <a href="a00247.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00263.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00265.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00266.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00274.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00275.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00276.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00277.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00279.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00280.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00292.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00293.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00302.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00305.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00313.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00315.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00316.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00317.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00326.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00330.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00332.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00338.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00342.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00347.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00351.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00355.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00360.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00361.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00362.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00363.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00218.html">scalable_allocator.h</a> <a href="a00364.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00365.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00366.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task.h</b> <a href="a00367.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00376.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00383.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00384.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00386.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00387.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00391.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_config_lrb.h</b> <a href="a00392.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00393.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00394.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00397.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00398.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00403.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00411.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00413.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/functions.html b/doc/html/functions.html
index f215725..eb9c00e 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -62,238 +62,241 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
 <li>acquire()
-: <a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
-: <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
-: <a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
-: <a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
-: <a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
-: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
-: <a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00172.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00157.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00158.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
+: <a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
+: <a class="el" href="a00181.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
+: <a class="el" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00174.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
+: <a class="el" href="a00178.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
+: <a class="el" href="a00141.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00141.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
+: <a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
 <h3><a class="anchor" name="index_b">- b -</a></h3><ul>
 <li>back()
-: <a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a></ul>
+: <a class="el" href="a00141.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00143.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00127.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00135.html#d1c1e23f2a3ba1f943d00d95388d718f">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_c">- c -</a></h3><ul>
 <li>cancel_group_execution()
-: <a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
-: <a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::c [...]
-: <a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
-: <a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>construct()
-: <a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
-: <a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00174.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00175.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00141.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
+: <a class="el" href="a00141.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00141.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
+: <a class="el" href="a00176.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00158.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::c [...]
+: <a class="el" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00141.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
+: <a class="el" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00135.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
+: <a class="el" href="a00140.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00139.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00141.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
+: <a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>construct()
+: <a class="el" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00130.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
+: <a class="el" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
+: <a class="el" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00141.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00141.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_d">- d -</a></h3><ul>
 <li>deallocate()
-: <a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
-: <a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>downgrade_to_reader()
-: <a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
+: <a class="el" href="a00177.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00181.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00178.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
+: <a class="el" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>downgrade_to_reader()
+: <a class="el" href="a00172.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00163.html#0d2f93edf7b15ec4bcee138823220c52">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="a00168.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#f3f6fce0cf [...]
-: <a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enumerable_thread_specific()
-: <a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">tbb::task</a><li>executing
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
+: <a class="el" href="a00176.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00143.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#f3f6fce0cf [...]
+: <a class="el" href="a00143.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enumerable_thread_specific()
+: <a class="el" href="a00143.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00135.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
+: <a class="el" href="a00135.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">tbb::task</a><li>executing
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
 <h3><a class="anchor" name="index_f">- f -</a></h3><ul>
 <li>finalize()
-: <a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>freed
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
-: <a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00144.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00135.html#4f7cc0aab2d8216c0a6e681f32dd48c8">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>freed
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
+: <a class="el" href="a00141.html#502615a858eb9fa0390ee59169065e90">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="a00136.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>grainsize()
-: <a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00141.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>grainsize()
+: <a class="el" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
+: <a class="el" href="a00141.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00141.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
 <li>increment_ref_count()
-: <a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
-: <a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00130.html#f0cdf5930563a49ffe827c520e948e01">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
-: <a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
-: <a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
+: <a class="el" href="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
+: <a class="el" href="a00175.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00177.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00135.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00135.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00135.html#f0cdf5930563a49ffe827c520e948e01">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
+: <a class="el" href="a00184.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00177.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00127.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00175.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00144.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00174.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00144.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00174.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00137.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
 <h3><a class="anchor" name="index_l">- l -</a></h3><ul>
 <li>local()
-: <a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
-: <a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00143.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00171.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00171.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
+: <a class="el" href="a00135.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_m">- m -</a></h3><ul>
 <li>malloc_type
-: <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
-: <a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00125.html#fb23b68 [...]
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>move()
-: <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
-: <a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a><li>my_exception_data
-: <a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
+: <a class="el" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
+: <a class="el" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00130.html#fb23b68 [...]
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>move()
+: <a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00150.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a><li>my_exception_data
+: <a class="el" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
 <h3><a class="anchor" name="index_n">- n -</a></h3><ul>
 <li>name()
-: <a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
-: <a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+: <a class="el" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00180.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00174.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00183.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
 <h3><a class="anchor" name="index_o">- o -</a></h3><ul>
 <li>operator *()
-: <a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
-: <a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
-: <a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00136.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00138.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00137.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
+: <a class="el" href="a00184.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
+: <a class="el" href="a00184.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00183.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00184.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00136.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00138.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00141.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00141.html#c6fade5c732cc95274d1d8277ea619d1">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="a00124.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
-: <a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>parallel_while()
-: <a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
-: <a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00129.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
+: <a class="el" href="a00129.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>parallel_while()
+: <a class="el" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00158.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00176.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00140.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
+: <a class="el" href="a00182.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
+: <a class="el" href="a00176.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
 <h3><a class="anchor" name="index_q">- q -</a></h3><ul>
 <li>queuing_mutex()
-: <a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
 <h3><a class="anchor" name="index_r">- r -</a></h3><ul>
 <li>range()
-: <a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>ready
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
-: <a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
-: <a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
-: <a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
-: <a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>register_pending_exception()
-: <a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>release()
-: <a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>row_range_type
-: <a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
-: <a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
+: <a class="el" href="a00143.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00141.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>ready
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
+: <a class="el" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
+: <a class="el" href="a00174.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00174.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
+: <a class="el" href="a00174.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
+: <a class="el" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>register_pending_exception()
+: <a class="el" href="a00175.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>rehash()
+: <a class="el" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00172.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00141.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00141.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00175.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00141.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>row_range_type
+: <a class="el" href="a00128.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
+: <a class="el" href="a00129.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00158.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
 <h3><a class="anchor" name="index_s">- s -</a></h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">tbb::qu [...]
-: <a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>serial
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a><li>set_affinity()
-: <a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
-: <a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
-: <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator &g [...]
-: <a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>spawn()
-: <a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>swap()
-: <a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00172.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#9b51ef972f5618ac17caadb58841ab6d">tbb::qu [...]
+: <a class="el" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>serial
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a><li>set_affinity()
+: <a class="el" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
+: <a class="el" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
+: <a class="el" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
+: <a class="el" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator &g [...]
+: <a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>spawn()
+: <a class="el" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00174.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>swap()
+: <a class="el" href="a00141.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_t">- t -</a></h3><ul>
 <li>task()
-: <a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
-: <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
-: <a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
+: <a class="el" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00176.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00181.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00149.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00172.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00171.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00164.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00171.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
+: <a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
+: <a class="el" href="a00182.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
 <h3><a class="anchor" name="index_u">- u -</a></h3><ul>
 <li>unlock()
-: <a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00171.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00139.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00172.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00163.html#11ba1da4a722c9e6f73339a52c487e82">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="a00149.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a cl [...]
+: <a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00134.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00136.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a cl [...]
 <h3><a class="anchor" name="index_w">- w -</a></h3><ul>
 <li>wait_for_all()
-: <a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
-: <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <a class="el" href="a00174.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
+: <a class="el" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
 <h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
-<li>~combinable()
-: <a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
-: <a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">tbb::qu [...]
-: <a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+<li>~bad_last_alloc()
+: <a class="el" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">tbb::bad_last_alloc</a><li>~combinable()
+: <a class="el" href="a00133.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00135.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00139.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00141.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00138.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00143.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00144.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00158.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00172.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#ac2c576a93570957d694192a5f491443">tbb::qu [...]
+: <a class="el" href="a00171.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00176.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html
index b429934..1c15b28 100644
--- a/doc/html/functions_enum.html
+++ b/doc/html/functions_enum.html
@@ -35,9 +35,9 @@
 <p>
 <ul>
 <li>malloc_type
-: <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>mode
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>state_type
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a></ul>
+: <a class="el" href="a00178.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>mode
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>state_type
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
index 3370c2b..b6c77e3 100644
--- a/doc/html/functions_eval.html
+++ b/doc/html/functions_eval.html
@@ -35,16 +35,16 @@
 <p>
 <ul>
 <li>allocated
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>executing
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>parallel
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>ready
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
-: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>serial
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
-: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a></ul>
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>executing
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>parallel
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>ready
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
+: <a class="el" href="a00174.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>serial
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00144.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index 78d50d8..8ce672e 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -61,209 +61,212 @@
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
 <li>acquire()
-: <a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
-: <a class="el" href="a00173.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
-: <a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
-: <a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
-: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00172.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00157.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00156.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00158.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00174.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
+: <a class="el" href="a00181.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00178.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00130.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
+: <a class="el" href="a00174.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00174.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00174.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00174.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
+: <a class="el" href="a00178.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
+: <a class="el" href="a00141.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00141.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_b">- b -</a></h3><ul>
 <li>back()
-: <a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a></ul>
+: <a class="el" href="a00141.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00143.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00127.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00121.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00127.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00135.html#d1c1e23f2a3ba1f943d00d95388d718f">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_c">- c -</a></h3><ul>
 <li>cancel_group_execution()
-: <a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
-: <a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::c [...]
-: <a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
-: <a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
-: <a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00174.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00175.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00141.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
+: <a class="el" href="a00141.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00141.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>clear()
+: <a class="el" href="a00176.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00158.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00143.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::c [...]
+: <a class="el" href="a00129.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00141.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
+: <a class="el" href="a00134.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00135.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
+: <a class="el" href="a00140.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00139.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00141.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00138.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
+: <a class="el" href="a00178.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00130.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
+: <a class="el" href="a00174.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
+: <a class="el" href="a00135.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00141.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00141.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_d">- d -</a></h3><ul>
 <li>deallocate()
-: <a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
-: <a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00178.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00130.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00174.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
+: <a class="el" href="a00177.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00181.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00149.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00180.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00178.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
+: <a class="el" href="a00172.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00163.html#0d2f93edf7b15ec4bcee138823220c52">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="a00168.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#f3f6fce0cf [...]
-: <a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enumerable_thread_specific()
-: <a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">tbb::task</a></ul>
+: <a class="el" href="a00176.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00143.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#f3f6fce0cf [...]
+: <a class="el" href="a00143.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00127.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00121.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enumerable_thread_specific()
+: <a class="el" href="a00143.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00135.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
+: <a class="el" href="a00135.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <a class="el" href="a00174.html#22c298cd40937a431a06777423f002f6">tbb::task</a></ul>
 <h3><a class="anchor" name="index_f">- f -</a></h3><ul>
 <li>finalize()
-: <a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>front()
-: <a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00144.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00135.html#4f7cc0aab2d8216c0a6e681f32dd48c8">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>front()
+: <a class="el" href="a00141.html#502615a858eb9fa0390ee59169065e90">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="a00136.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>grainsize()
-: <a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00141.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00135.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>grainsize()
+: <a class="el" href="a00127.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
+: <a class="el" href="a00141.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00141.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
 <li>increment_ref_count()
-: <a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
-: <a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00130.html#f0cdf5930563a49ffe827c520e948e01">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
-: <a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
-: <a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
+: <a class="el" href="a00174.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
+: <a class="el" href="a00175.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00177.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00135.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00135.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00135.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00135.html#f0cdf5930563a49ffe827c520e948e01">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
+: <a class="el" href="a00184.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00177.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00144.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00174.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00129.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00127.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00175.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00144.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00174.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00144.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00174.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00137.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
 <h3><a class="anchor" name="index_l">- l -</a></h3><ul>
 <li>local()
-: <a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
-: <a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00143.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00171.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00164.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00171.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
+: <a class="el" href="a00135.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_m">- m -</a></h3><ul>
 <li>max_size()
-: <a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00125.html#fb23b68 [...]
-: <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
-: <a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a></ul>
+: <a class="el" href="a00178.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00166.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00141.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00130.html#fb23b68 [...]
+: <a class="el" href="a00149.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00180.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00150.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a></ul>
 <h3><a class="anchor" name="index_n">- n -</a></h3><ul>
 <li>name()
-: <a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
-: <a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+: <a class="el" href="a00149.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00180.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00174.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00183.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
 <h3><a class="anchor" name="index_o">- o -</a></h3><ul>
 <li>operator *()
-: <a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00172.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
-: <a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00136.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00138.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00180.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00144.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00137.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
+: <a class="el" href="a00184.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00184.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00136.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00138.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00141.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00141.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
 <h3><a class="anchor" name="index_p">- p -</a></h3><ul>
 <li>pages()
-: <a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
-: <a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00129.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00157.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00174.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00124.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00158.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00134.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00176.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00140.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
+: <a class="el" href="a00182.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00134.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a><li>push_back()
+: <a class="el" href="a00176.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00141.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00140.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
 <h3><a class="anchor" name="index_q">- q -</a></h3><ul>
 <li>queuing_mutex()
-: <a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00160.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00162.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
 <h3><a class="anchor" name="index_r">- r -</a></h3><ul>
 <li>range()
-: <a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>recursive_mutex()
-: <a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
-: <a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
-: <a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
-: <a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>release()
-: <a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>rows()
-: <a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
+: <a class="el" href="a00143.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00141.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>recursive_mutex()
+: <a class="el" href="a00164.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
+: <a class="el" href="a00174.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00174.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00174.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00174.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
+: <a class="el" href="a00174.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
+: <a class="el" href="a00175.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>rehash()
+: <a class="el" href="a00135.html#9ba53dc3a98d81331ded7c6c2b17f58f">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00172.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00141.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00141.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00175.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00141.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>rows()
+: <a class="el" href="a00129.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00128.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00158.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00157.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a></ul>
 <h3><a class="anchor" name="index_s">- s -</a></h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">tbb::qu [...]
-: <a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>set_affinity()
-: <a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
-: <a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
-: <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator &g [...]
-: <a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>swap()
-: <a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00172.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#9b51ef972f5618ac17caadb58841ab6d">tbb::qu [...]
+: <a class="el" href="a00184.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00174.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>set_affinity()
+: <a class="el" href="a00174.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00134.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
+: <a class="el" href="a00174.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
+: <a class="el" href="a00141.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
+: <a class="el" href="a00143.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00141.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00134.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00135.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator &g [...]
+: <a class="el" href="a00174.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00174.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00174.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00169.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00171.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00174.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>swap()
+: <a class="el" href="a00141.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00135.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <h3><a class="anchor" name="index_t">- t -</a></h3><ul>
 <li>task()
-: <a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
-: <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
-: <a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
+: <a class="el" href="a00174.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00175.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00176.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00177.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00177.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00181.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00149.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00180.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00183.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00172.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00171.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00164.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00171.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
+: <a class="el" href="a00134.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
+: <a class="el" href="a00182.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00134.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
 <h3><a class="anchor" name="index_u">- u -</a></h3><ul>
 <li>unlock()
-: <a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00171.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00169.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00164.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00150.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00139.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00172.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00163.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
 <h3><a class="anchor" name="index_w">- w -</a></h3><ul>
 <li>wait_for_all()
-: <a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
-: <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <a class="el" href="a00174.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
+: <a class="el" href="a00149.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00132.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00180.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
 <h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
-<li>~combinable()
-: <a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
-: <a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">tbb::qu [...]
-: <a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+<li>~bad_last_alloc()
+: <a class="el" href="a00126.html#af817b8268cabc44ecd9c9ef986f6192">tbb::bad_last_alloc</a><li>~combinable()
+: <a class="el" href="a00133.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00134.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00135.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00139.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00141.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00138.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00143.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00144.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00157.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00158.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00162.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00172.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00170.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00165.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00163.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00161.html#ac2c576a93570957d694192a5f491443">tbb::qu [...]
+: <a class="el" href="a00171.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00174.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00176.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00177.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
index cb05088..d4dd222 100644
--- a/doc/html/functions_rela.html
+++ b/doc/html/functions_rela.html
@@ -35,8 +35,8 @@
 <p>
 <ul>
 <li>operator+
-: <a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
+: <a class="el" href="a00184.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00183.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00184.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index 2feb768..b07ebac 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -35,16 +35,16 @@
 <p>
 <ul>
 <li>affinity_id
-: <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
-: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>const_iterator
-: <a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>difference_type
-: <a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>page_range_type
-: <a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
-: <a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>row_range_type
-: <a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
-: <a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>value_type
-: <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a cl [...]
+: <a class="el" href="a00174.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
+: <a class="el" href="a00178.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00143.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00134.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>const_iterator
+: <a class="el" href="a00127.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00134.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>difference_type
+: <a class="el" href="a00134.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>page_range_type
+: <a class="el" href="a00129.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
+: <a class="el" href="a00134.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>row_range_type
+: <a class="el" href="a00128.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
+: <a class="el" href="a00134.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00127.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>value_type
+: <a class="el" href="a00157.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00134.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00139.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00136.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a cl [...]
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index c50f97a..2cfa6d1 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -35,9 +35,9 @@
 <p>
 <ul>
 <li>automatic
-: <a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>my_exception_data
-: <a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
+: <a class="el" href="a00177.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00177.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>my_exception_data
+: <a class="el" href="a00149.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/globals.html b/doc/html/globals.html
index 8f087ce..058fc3f 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -29,15 +29,15 @@ Here is a list of all documented file members with links to the documentation:
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <a class="el" href="a00243.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00243.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00243.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00243.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00243.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00243.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00243.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00243.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index df84b42..56d2188 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -29,15 +29,15 @@
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00235.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <a class="el" href="a00243.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00243.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00243.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00243.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00243.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00243.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00243.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00243.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00243.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/graph_legend.html b/doc/html/graph_legend.html
deleted file mode 100644
index 72aae12..0000000
--- a/doc/html/graph_legend.html
+++ /dev/null
@@ -1,87 +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>Graph Legend</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main Page</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-    <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="pages.html"><span>Related Pages</span></a></li>
-  </ul></div>
-<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 { };
-<span class="comment"></span>
-<span class="comment">/*! Truncated class, inheritance relation is hidden */</span>
-<span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };
-
-<span class="comment">/* Class not documented with doxygen comments */</span>
-<span class="keyword">class </span>Undocumented { };
-<span class="comment"></span>
-<span class="comment">/*! Class that is inherited using public inheritance */</span>
-<span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };
-<span class="comment"></span>
-<span class="comment">/*! A template class */</span>
-<span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span>Templ { };
-<span class="comment"></span>
-<span class="comment">/*! Class that is inherited using protected inheritance */</span>
-<span class="keyword">class </span>ProtectedBase { };
-<span class="comment"></span>
-<span class="comment">/*! Class that is inherited using private inheritance */</span>
-<span class="keyword">class </span>PrivateBase { };
-<span class="comment"></span>
-<span class="comment">/*! Class that is used by the Inherited class */</span>
-<span class="keyword">class </span>Used { };
-<span class="comment"></span>
-<span class="comment">/*! Super class that inherits a number of other classes */</span>
-<span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,
-                  <span class="keyword">protected</span> ProtectedBase,
-                  <span class="keyword">private</span> PrivateBase,
-                  <span class="keyword">public</span> Undocumented
-                  <span class="keyword">public</span> Templ<int>
-{
-  <span class="keyword">private</span>:
-    Used *m_usedClass;
-};
-</pre></div> If the <code>MAX_DOT_GRAPH_HEIGHT</code> tag in the configuration file is set to 240 this will result in the following graph:<p>
-<center><div align="center">
-<img src="graph_legend.gif" alt="graph_legend.gif">
-</div>
-</center> <p>
-The boxes in the above graph have the following meaning: <ul>
-<li>
-A filled black box represents the struct or class for which the graph is generated. </li>
-<li>
-A box with a black border denotes a documented struct or class. </li>
-<li>
-A box with a grey border denotes an undocumented struct or class. </li>
-<li>
-A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
-</ul>
-The arrows have the following meaning: <ul>
-<li>
-A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
-<li>
-A dark green arrow is used for protected inheritance. </li>
-<li>
-A dark red arrow is used for private inheritance. </li>
-<li>
-A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
-<li>
-A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
-</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/hierarchy.html b/doc/html/hierarchy.html
index 883a6ce..e644b0d 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -21,83 +21,85 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <h1>Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
-<li><a class="el" href="a00115.html">tbb::affinity_partitioner</a>
-<li><a class="el" href="a00116.html">tbb::aligned_space< T, N ></a>
-<li><a class="el" href="a00117.html">tbb::atomic< T ></a>
-<li><a class="el" href="a00118.html">tbb::atomic< void * ></a>
-<li><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>
-<li><a class="el" href="a00120.html">tbb::auto_partitioner</a>
-<li><a class="el" href="a00121.html">tbb::bad_last_alloc</a>
-<li><a class="el" href="a00122.html">tbb::blocked_range< Value ></a>
-<li><a class="el" href="a00123.html">tbb::blocked_range2d< RowValue, ColValue ></a>
-<li><a class="el" href="a00124.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-<li><a class="el" href="a00122.html">tbb::blocked_range< I ></a>
-<li><a class="el" href="a00125.html">tbb::cache_aligned_allocator< T ></a>
-<li><a class="el" href="a00126.html">tbb::cache_aligned_allocator< void ></a>
-<li><a class="el" href="a00128.html">tbb::combinable< T ></a>
-<li><a class="el" href="a00129.html">tbb::concurrent_bounded_queue< T, A ></a>
+<li><a class="el" href="a00120.html">tbb::affinity_partitioner</a>
+<li><a class="el" href="a00121.html">tbb::aligned_space< T, N ></a>
+<li><a class="el" href="a00122.html">tbb::atomic< T ></a>
+<li><a class="el" href="a00123.html">tbb::atomic< void * ></a>
+<li><a class="el" href="a00124.html">tbb::internal::atomic_backoff</a>
+<li><a class="el" href="a00125.html">tbb::auto_partitioner</a>
+<li><a class="el" href="a00126.html">tbb::bad_last_alloc</a>
+<li><a class="el" href="a00127.html">tbb::blocked_range< Value ></a>
+<li><a class="el" href="a00128.html">tbb::blocked_range2d< RowValue, ColValue ></a>
+<li><a class="el" href="a00129.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+<li><a class="el" href="a00127.html">tbb::blocked_range< I ></a>
+<li><a class="el" href="a00130.html">tbb::cache_aligned_allocator< T ></a>
+<li><a class="el" href="a00131.html">tbb::cache_aligned_allocator< void ></a>
+<li><a class="el" href="a00133.html">tbb::combinable< T ></a>
+<li><a class="el" href="a00134.html">tbb::concurrent_bounded_queue< T, A ></a>
 <ul>
-<li><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00140.html">tbb::deprecated::concurrent_queue< T, A ></a>
 </ul>
-<li><a class="el" href="a00130.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
-<li><a class="el" href="a00132.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
-<li><a class="el" href="a00133.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
+<li><a class="el" href="a00135.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
+<li><a class="el" href="a00137.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
+<li><a class="el" href="a00138.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
 <ul>
-<li><a class="el" href="a00131.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
+<li><a class="el" href="a00136.html">tbb::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
 </ul>
-<li><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
-<li><a class="el" href="a00136.html">tbb::concurrent_vector< T, A ></a>
-<li><a class="el" href="a00138.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-<li><a class="el" href="a00139.html">tbb::filter</a>
+<li><a class="el" href="a00139.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00141.html">tbb::concurrent_vector< T, A ></a>
+<li><a class="el" href="a00143.html">tbb::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+<li><a class="el" href="a00144.html">tbb::filter</a>
 <ul>
-<li><a class="el" href="a00175.html">tbb::thread_bound_filter</a>
+<li><a class="el" href="a00182.html">tbb::thread_bound_filter</a>
 </ul>
-<li><a class="el" href="a00140.html">tbb::final_scan_tag</a>
-<li><b>atomic_impl</b><li><a class="el" href="a00142.html">tbb::mutex</a>
-<li><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>
-<li><a class="el" href="a00144.html">tbb::null_mutex</a>
-<li><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>
-<li><a class="el" href="a00146.html">tbb::null_rw_mutex</a>
-<li><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00148.html">tbb::parallel_do_feeder< Item ></a>
-<li><a class="el" href="a00149.html">tbb::parallel_while< Body ></a>
-<li><a class="el" href="a00150.html">tbb::pipeline</a>
-<li><a class="el" href="a00151.html">tbb::pre_scan_tag</a>
-<li><a class="el" href="a00152.html">tbb::queuing_mutex</a>
-<li><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a>
-<li><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>
-<li><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00156.html">tbb::recursive_mutex</a>
-<li><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>
-<li><a class="el" href="a00158.html">tbb::scalable_allocator< T ></a>
-<li><a class="el" href="a00159.html">tbb::scalable_allocator< void ></a>
-<li><a class="el" href="a00160.html">tbb::simple_partitioner</a>
-<li><a class="el" href="a00161.html">tbb::spin_mutex</a>
-<li><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>
-<li><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>
-<li><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
-<li><a class="el" href="a00165.html">tbb::split</a>
-<li><a class="el" href="a00166.html">tbb::task</a>
+<li><a class="el" href="a00145.html">tbb::final_scan_tag</a>
+<li><a class="el" href="a00146.html">tbb::improper_lock</a>
+<li><b>atomic_impl</b><li><a class="el" href="a00147.html">tbb::invalid_multiple_scheduling</a>
+<li><a class="el" href="a00148.html">tbb::missing_wait</a>
+<li><a class="el" href="a00150.html">tbb::mutex</a>
+<li><a class="el" href="a00151.html">tbb::mutex::scoped_lock</a>
+<li><a class="el" href="a00152.html">tbb::null_mutex</a>
+<li><a class="el" href="a00153.html">tbb::null_mutex::scoped_lock</a>
+<li><a class="el" href="a00154.html">tbb::null_rw_mutex</a>
+<li><a class="el" href="a00155.html">tbb::null_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00156.html">tbb::parallel_do_feeder< Item ></a>
+<li><a class="el" href="a00157.html">tbb::parallel_while< Body ></a>
+<li><a class="el" href="a00158.html">tbb::pipeline</a>
+<li><a class="el" href="a00159.html">tbb::pre_scan_tag</a>
+<li><a class="el" href="a00160.html">tbb::queuing_mutex</a>
+<li><a class="el" href="a00161.html">tbb::queuing_mutex::scoped_lock</a>
+<li><a class="el" href="a00162.html">tbb::queuing_rw_mutex</a>
+<li><a class="el" href="a00163.html">tbb::queuing_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00164.html">tbb::recursive_mutex</a>
+<li><a class="el" href="a00165.html">tbb::recursive_mutex::scoped_lock</a>
+<li><a class="el" href="a00166.html">tbb::scalable_allocator< T ></a>
+<li><a class="el" href="a00167.html">tbb::scalable_allocator< void ></a>
+<li><a class="el" href="a00168.html">tbb::simple_partitioner</a>
+<li><a class="el" href="a00169.html">tbb::spin_mutex</a>
+<li><a class="el" href="a00170.html">tbb::spin_mutex::scoped_lock</a>
+<li><a class="el" href="a00171.html">tbb::spin_rw_mutex_v3</a>
+<li><a class="el" href="a00172.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
+<li><a class="el" href="a00173.html">tbb::split</a>
+<li><a class="el" href="a00174.html">tbb::task</a>
 <ul>
-<li><a class="el" href="a00137.html">tbb::empty_task</a>
+<li><a class="el" href="a00142.html">tbb::empty_task</a>
 </ul>
-<li><a class="el" href="a00167.html">tbb::task_group_context</a>
-<li><a class="el" href="a00168.html">tbb::task_list</a>
-<li><a class="el" href="a00169.html">tbb::task_scheduler_init</a>
-<li><a class="el" href="a00170.html">tbb::tbb_allocator< T ></a>
-<li><a class="el" href="a00171.html">tbb::tbb_allocator< void ></a>
-<li><a class="el" href="a00172.html">tbb::tbb_exception</a>
+<li><a class="el" href="a00175.html">tbb::task_group_context</a>
+<li><a class="el" href="a00176.html">tbb::task_list</a>
+<li><a class="el" href="a00177.html">tbb::task_scheduler_init</a>
+<li><a class="el" href="a00178.html">tbb::tbb_allocator< T ></a>
+<li><a class="el" href="a00179.html">tbb::tbb_allocator< void ></a>
+<li><a class="el" href="a00180.html">tbb::tbb_exception</a>
 <ul>
-<li><a class="el" href="a00127.html">tbb::captured_exception</a>
-<li><a class="el" href="a00141.html">tbb::movable_exception< ExceptionData ></a>
+<li><a class="el" href="a00132.html">tbb::captured_exception</a>
+<li><a class="el" href="a00149.html">tbb::movable_exception< ExceptionData ></a>
 </ul>
-<li><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>
-<li><a class="el" href="a00174.html">tbb::tbb_hash_compare< T ></a>
-<li><a class="el" href="a00176.html">tbb::tick_count</a>
-<li><a class="el" href="a00177.html">tbb::tick_count::interval_t</a>
-<li><a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
-<li><a class="el" href="a00179.html">tbb::zero_allocator< T, Allocator ></a>
-<li><a class="el" href="a00180.html">tbb::zero_allocator< void, Allocator ></a>
+<li><a class="el" href="a00181.html">tbb::internal::tbb_exception_ptr</a>
+<li><a class="el" href="a00183.html">tbb::tick_count</a>
+<li><a class="el" href="a00184.html">tbb::tick_count::interval_t</a>
+<li><a class="el" href="a00185.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
+<li><a class="el" href="a00186.html">tbb::zero_allocator< T, Allocator ></a>
+<li><a class="el" href="a00187.html">tbb::zero_allocator< void, Allocator ></a>
 </ul>
 <hr>
 <p></p>
diff --git a/doc/html/modules.html b/doc/html/modules.html
index 3e26ac0..f36e3ae 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -15,12 +15,12 @@
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
 <h1>Modules</h1>Here is a list of all modules:<ul>
-<li><a class="el" href="a00233.html">Algorithms</a>
-<li><a class="el" href="a00234.html">Containers</a>
-<li><a class="el" href="a00235.html">Memory Allocation</a>
-<li><a class="el" href="a00236.html">Synchronization</a>
-<li><a class="el" href="a00237.html">Timing</a>
-<li><a class="el" href="a00238.html">Task Scheduling</a>
+<li><a class="el" href="a00241.html">Algorithms</a>
+<li><a class="el" href="a00242.html">Containers</a>
+<li><a class="el" href="a00243.html">Memory Allocation</a>
+<li><a class="el" href="a00244.html">Synchronization</a>
+<li><a class="el" href="a00245.html">Timing</a>
+<li><a class="el" href="a00246.html">Task Scheduling</a>
 </ul>
 <hr>
 <p></p>
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 0c90880..9856182 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -33,25 +33,25 @@ Here is a list of all documented namespace members with links to the namespaces
 <p>
 <ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">tbb</a><li>__TBB_full_fence
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
-: <a class="el" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
-: <a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>ets_key_usage_type
-: <a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>hash_multiplier
-: <a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a><li>memory_semantics
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_do()
-: <a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00232.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
-: <a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00229.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00237.html#ad165cf61abbe349d413df2589679add">tbb</a><li>__TBB_full_fence
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
+: <a class="el" href="a00237.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
+: <a class="el" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>ets_key_usage_type
+: <a class="el" href="a00237.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>hash_multiplier
+: <a class="el" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a><li>memory_semantics
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_do()
+: <a class="el" href="a00241.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00240.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00241.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00241.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00241.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00241.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00241.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00237.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
+: <a class="el" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00237.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html
index d6b1f30..d071910 100644
--- a/doc/html/namespacemembers_enum.html
+++ b/doc/html/namespacemembers_enum.html
@@ -33,8 +33,8 @@
 <p>
 <ul>
 <li>ets_key_usage_type
-: <a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
+: <a class="el" href="a00237.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html
index 5037833..6e3d80f 100644
--- a/doc/html/namespacemembers_eval.html
+++ b/doc/html/namespacemembers_eval.html
@@ -33,9 +33,9 @@
 <p>
 <ul>
 <li>__TBB_full_fence
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>release
-: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>release
+: <a class="el" href="a00237.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index 4819361..ead1550 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -33,18 +33,18 @@
 <p>
 <ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
-: <a class="el" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>parallel_do()
-: <a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00232.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
-: <a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00229.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00237.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
+: <a class="el" href="a00237.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>parallel_do()
+: <a class="el" href="a00241.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00240.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00241.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00241.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00241.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00241.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00241.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00241.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00237.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
+: <a class="el" href="a00237.html#4b4d8d820cb2ec18147261226f2dd999">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00237.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html
index 9a8704f..0f474e7 100644
--- a/doc/html/namespacemembers_type.html
+++ b/doc/html/namespacemembers_type.html
@@ -33,7 +33,7 @@
 <p>
 <ul>
 <li>assertion_handler_type
-: <a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
+: <a class="el" href="a00237.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespacemembers_vars.html b/doc/html/namespacemembers_vars.html
index ffb3a55..11202f2 100644
--- a/doc/html/namespacemembers_vars.html
+++ b/doc/html/namespacemembers_vars.html
@@ -33,7 +33,7 @@
 <p>
 <ul>
 <li>hash_multiplier
-: <a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a></ul>
+: <a class="el" href="a00237.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
index 19324a4..501ffb9 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -20,8 +20,8 @@
     <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
   </ul></div>
 <h1>Namespace List</h1>Here is a list of all documented namespaces with brief descriptions:<table>
-  <tr><td class="indexkey"><a class="el" href="a00229.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="a00232.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00237.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="a00240.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
index d2b252a..893945e 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 34ba0e8..a1e3db3 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
index c733958..018bd77 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile.windows
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/GettingStarted/sub_string_finder/index.html b/examples/GettingStarted/sub_string_finder/index.html
index 64dd194..87f1eaf 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 674abf6..43844f3 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
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 d52f629..6321d1a 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
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 67f649f..fc9a372 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
index 7a384bc..1101c2d 100644
--- a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
+++ b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
@@ -188,9 +188,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* sub_string_finder */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */,
 				A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */,
@@ -234,6 +236,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -249,6 +252,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -267,11 +271,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -283,11 +287,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -295,10 +299,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -313,7 +320,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -332,6 +342,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -341,7 +352,6 @@
 				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;
@@ -353,6 +363,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -362,7 +373,6 @@
 				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;
@@ -375,6 +385,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -390,10 +401,13 @@
 		A1F5940E0B8F1DB600073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -412,6 +426,7 @@
 				COPY_PHASE_STRIP = YES;
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -427,7 +442,10 @@
 		A1F594100B8F1DB600073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -448,6 +466,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -463,10 +482,13 @@
 		A1F594210B8F1F4E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -485,6 +507,7 @@
 				COPY_PHASE_STRIP = YES;
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -500,7 +523,10 @@
 		A1F594230B8F1F4E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
diff --git a/examples/Makefile b/examples/Makefile
index c6368c7..785d18c 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/common/gui/Makefile.gmake b/examples/common/gui/Makefile.gmake
index 07d470d..c5b9f94 100644
--- a/examples/common/gui/Makefile.gmake
+++ b/examples/common/gui/Makefile.gmake
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
index 894c71e..7ca42c0 100644
--- a/examples/common/gui/Makefile.win
+++ b/examples/common/gui/Makefile.win
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 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 93fd708..b5e5285 100644
--- a/examples/common/gui/convideo.cpp
+++ b/examples/common/gui/convideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/gui/ddvideo.cpp b/examples/common/gui/ddvideo.cpp
index 4e1a28f..8ef0ee5 100644
--- a/examples/common/gui/ddvideo.cpp
+++ b/examples/common/gui/ddvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
index 2f766e3..879ab3d 100644
--- a/examples/common/gui/dxcheck.bat
+++ b/examples/common/gui/dxcheck.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2010 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 25cb02f..9b4caaf 100644
--- a/examples/common/gui/gdivideo.cpp
+++ b/examples/common/gui/gdivideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 f2e5224..51fdb3d 100644
--- a/examples/common/gui/macvideo.cpp
+++ b/examples/common/gui/macvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -1307,7 +1307,7 @@ WindowRef HandleNew()
     pWindowInfo->maxTextureSize = gpOpenGLCaps->maxTextureSize;
     pWindowInfo->fNPOTTextures = gpOpenGLCaps->f_ext_texture_rectangle;
     pWindowInfo->fClientTextures = gpOpenGLCaps->f_ext_client_storage; // texture from client memory if available
-    pWindowInfo->fAGPTexturing = true; // if AGP texturing selected
+    pWindowInfo->fAGPTexturing = false; // if AGP texturing selected
     pWindowInfo->pImageBuffer = (unsigned char*) g_pImg;
     // set default parameters for this image
     pWindowInfo->zoomX = 1.0f; // pixel 1 to 1 size
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
index f39db57..230603a 100644
--- a/examples/common/gui/video.h
+++ b/examples/common/gui/video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,7 +39,7 @@
 typedef unsigned int color_t;
 typedef unsigned char colorcomp_t;
 
-//! Sipmle proxy class for managing of different video systems
+//! Simple proxy class for managing of different video systems
 class video
 {
     //! colorspace information
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
index c89bbc6..589706a 100644
--- a/examples/common/gui/winvideo.h
+++ b/examples/common/gui/winvideo.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
index 7fb39a4..59b3781 100644
--- a/examples/common/gui/xvideo.cpp
+++ b/examples/common/gui/xvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/index.html b/examples/common/index.html
index 59ec57b..305f00d 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 b24370c..42c0163 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows
index 1fb0431..65519ec 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-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp
index 335a957..3e4cfa3 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,7 +30,6 @@
 #if __linux__ && defined(__INTEL_COMPILER)
 #define __sync_fetch_and_add(ptr,addend) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(ptr)), addend)
 #endif
-
 #include <string>
 #include <cstring>
 #include <cctype>
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
index 2ba9f04..7c014d4 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/xcode/count_strings.xcodeproj/project.pbxproj b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
index 9a29d3f..e0e99c8 100644
--- a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
+++ b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
@@ -104,9 +104,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* count_strings */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* count_strings */,
 			);
@@ -132,6 +134,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -147,6 +150,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -165,11 +169,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -181,11 +185,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -193,10 +197,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -211,7 +218,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -230,6 +240,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -239,7 +250,6 @@
 				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;
@@ -251,6 +261,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -260,7 +271,6 @@
 				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;
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
index 6fef85e..68305dc 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 aba1d27..6f143ef 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -7,7 +7,7 @@ This directory has example usages of Threading Building Blocks.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="GettingStarted/index.html">GettingStarted</A>
-<DD>Examples from the <A HREF="../doc/Getting_Started.pdf">Getting Started Guide</A>.
+<DD>Examples from the Getting Started Guide.
 <DT><A HREF="concurrent_hash_map/index.html">concurrent_hash_map</A>
 <DD>Examples using <CODE>concurrent_hash_map</CODE>.
 <DT><A HREF="parallel_do/index.html">parallel_do</A>
@@ -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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 7ec9d28..d75ae31 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 e642745..d664ec5 100644
--- a/examples/parallel_do/parallel_preorder/Graph.cpp
+++ b/examples/parallel_do/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 efab9a1..9cf1fe4 100644
--- a/examples/parallel_do/parallel_preorder/Graph.h
+++ b/examples/parallel_do/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,8 +30,6 @@
 #include "tbb/atomic.h"
 #include <vector>
 
-namespace TBB = tbb;
-
 enum OpKind {
     // Use Cell's value
     OP_VALUE,
@@ -65,7 +63,7 @@ public:
     std::vector<Cell*> successor;
 
     //! Reference count of number of inputs that are not yet updated.
-    TBB::atomic<int> ref_count;
+    tbb::atomic<int> ref_count;
 
     //! Update the Cell's value.
     void update();
diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/parallel_do/parallel_preorder/Makefile
index c4bba0c..48cb976 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/parallel_do/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_do/parallel_preorder/Makefile.windows b/examples/parallel_do/parallel_preorder/Makefile.windows
index 0abd775..e7371bf 100644
--- a/examples/parallel_do/parallel_preorder/Makefile.windows
+++ b/examples/parallel_do/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_do/parallel_preorder/Matrix.h b/examples/parallel_do/parallel_preorder/Matrix.h
index b7b47e6..b4d91a7 100644
--- a/examples/parallel_do/parallel_preorder/Matrix.h
+++ b/examples/parallel_do/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 09060a3..76b7c3f 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 df85e3e..303054a 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,14 +53,14 @@ public:
 
     void operator()( Cell* c, tbb::parallel_do_feeder<Cell*>& feeder ) const {
         c->update();
+        // Restore ref_count in preparation for subsequent traversal.
+        c->ref_count = ArityOfOp[c->op];
         for( size_t k=0; k<c->successor.size(); ++k ) {
             Cell* successor = c->successor[k];
             if( 0 == --(successor->ref_count) ) {
                 feeder.add( successor );
             }
         }
-        // Restore ref_count in preparation for subsequent traversal.
-        c->ref_count = ArityOfOp[c->op];
     }
 };   
 
@@ -151,7 +151,7 @@ int main( int argc, char* argv[] ) {
         size_t total_root_set_size = 0;
         for( int trial=0; trial<ntrial; ++trial ) {
             Graph g;
-            g.create_random_dag(10000);
+            g.create_random_dag(1000);
             vector<Cell*> root_set;
             g.get_root_set(root_set);
             total_root_set_size += root_set.size();
diff --git a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
index c89f216..d82d821 100644
--- a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
+++ b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
@@ -7,8 +7,8 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
 		05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };
+		05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.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 */
@@ -27,11 +27,11 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
-		05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
 		05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };
 		05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };
 		05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
+		05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
+		8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
 		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 */
 
@@ -111,9 +111,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* parallel_preorder */,
 			);
@@ -140,6 +142,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -155,6 +158,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -173,11 +177,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -189,11 +193,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -201,10 +205,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -219,7 +226,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -238,6 +248,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -247,7 +258,6 @@
 				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;
@@ -259,6 +269,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -268,7 +279,6 @@
 				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;
diff --git a/examples/parallel_for/game_of_life.NET/Makefile b/examples/parallel_for/game_of_life.NET/Makefile
index c9d4125..16f963b 100644
--- a/examples/parallel_for/game_of_life.NET/Makefile
+++ b/examples/parallel_for/game_of_life.NET/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/game_of_life.NET/Makefile.windows b/examples/parallel_for/game_of_life.NET/Makefile.windows
index e6d0e63..5ea1868 100644
--- a/examples/parallel_for/game_of_life.NET/Makefile.windows
+++ b/examples/parallel_for/game_of_life.NET/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/game_of_life.NET/index.html b/examples/parallel_for/game_of_life.NET/index.html
index 0c950a6..bc7d850 100644
--- a/examples/parallel_for/game_of_life.NET/index.html
+++ b/examples/parallel_for/game_of_life.NET/index.html
@@ -41,7 +41,7 @@ For Windows* systems, Microsoft* Visual Studio* projects are provided for each o
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/game_of_life.NET/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
index bc5d63d..fc77a19 100644
--- a/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
+++ b/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Board.h b/examples/parallel_for/game_of_life.NET/src/Board.h
index 65e980a..c64129a 100644
--- a/examples/parallel_for/game_of_life.NET/src/Board.h
+++ b/examples/parallel_for/game_of_life.NET/src/Board.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Evolution.cpp b/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
index 05faa03..dff5cdb 100644
--- a/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
+++ b/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Evolution.h b/examples/parallel_for/game_of_life.NET/src/Evolution.h
index e70606a..48a06a2 100644
--- a/examples/parallel_for/game_of_life.NET/src/Evolution.h
+++ b/examples/parallel_for/game_of_life.NET/src/Evolution.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Form1.h b/examples/parallel_for/game_of_life.NET/src/Form1.h
index 972b78f..97563b1 100644
--- a/examples/parallel_for/game_of_life.NET/src/Form1.h
+++ b/examples/parallel_for/game_of_life.NET/src/Form1.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp b/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
index 367e629..5657a05 100644
--- a/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
+++ b/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life.NET/src/Update_state.cpp b/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
index 64c8f4d..84439b9 100644
--- a/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
+++ b/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/index.html b/examples/parallel_for/index.html
index 0c2b348..6924f7a 100644
--- a/examples/parallel_for/index.html
+++ b/examples/parallel_for/index.html
@@ -19,7 +19,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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 7e50547..160c0f7 100644
--- a/examples/parallel_for/polygon_overlay/Makefile
+++ b/examples/parallel_for/polygon_overlay/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows
index dc96cfd..32babf9 100644
--- a/examples/parallel_for/polygon_overlay/Makefile.windows
+++ b/examples/parallel_for/polygon_overlay/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/polygon_overlay/index.html b/examples/parallel_for/polygon_overlay/index.html
index 0508310..3833c37 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 02a7f16..e4e6def 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 47652b7..f5dc943 100644
--- a/examples/parallel_for/polygon_overlay/polymain.h
+++ b/examples/parallel_for/polygon_overlay/polymain.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 1ca3f9c..99ddfdd 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 3965712..f36c886 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 35f4ddd..0b38705 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 cc1e159..d1e2b7d 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 d2fd8bb..d680401 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 c1bb617..020422a 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
index 8e24947..a8a1e5f 100644
--- a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
@@ -1,307 +1,309 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 42;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */; };
-		6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA900DA2C0B3008D95BD /* polyover.cpp */; };
-		6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */; };
-		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
-		A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
-		A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
-		A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };
-		A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };
-		A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };
-		A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };
-		A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
-		A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
-		A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */,
-				A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
-		32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PolygonOverlay.pch; sourceTree = "<group>"; };
-		6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = SOURCE_ROOT; };
-		6A6DAA8F0DA2C0B3008D95BD /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = SOURCE_ROOT; };
-		6A6DAA900DA2C0B3008D95BD /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = SOURCE_ROOT; };
-		6A6DAA910DA2C0B3008D95BD /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = SOURCE_ROOT; };
-		6A6DAA920DA2C0B3008D95BD /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = SOURCE_ROOT; };
-		6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = SOURCE_ROOT; };
-		6A6DAA940DA2C0B3008D95BD /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = SOURCE_ROOT; };
-		6A6DAA950DA2C0B3008D95BD /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = SOURCE_ROOT; };
-		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
-		8D0C4E970486CD37000505A6 /* PolygonOverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PolygonOverlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
-		A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
-		A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
-		A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
-		A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
-		A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8D0C4E910486CD37000505A6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
-				A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
-				A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
-				A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */,
-				A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
-				A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		195DF8CFFE9D517E11CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8D0C4E970486CD37000505A6 /* PolygonOverlay.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		20286C29FDCF999611CA2CEA /* PolygonOverlay */ = {
-			isa = PBXGroup;
-			children = (
-				20286C2AFDCF999611CA2CEA /* Sources */,
-				20286C2CFDCF999611CA2CEA /* Resources */,
-				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
-				195DF8CFFE9D517E11CA2CBB /* Products */,
-			);
-			name = PolygonOverlay;
-			sourceTree = "<group>";
-		};
-		20286C2AFDCF999611CA2CEA /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */,
-				6A6DAA8F0DA2C0B3008D95BD /* polymain.h */,
-				6A6DAA900DA2C0B3008D95BD /* polyover.cpp */,
-				6A6DAA910DA2C0B3008D95BD /* polyover.h */,
-				6A6DAA920DA2C0B3008D95BD /* pover_global.h */,
-				6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */,
-				6A6DAA940DA2C0B3008D95BD /* pover_video.h */,
-				6A6DAA950DA2C0B3008D95BD /* rpolygon.h */,
-				A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
-				A1F591AB0B8DFC9600073279 /* video.h */,
-				32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		20286C2CFDCF999611CA2CEA /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				8D0C4E960486CD37000505A6 /* Info.plist */,
-				02345980000FD03B11CA0E72 /* main.nib */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
-			isa = PBXGroup;
-			children = (
-				A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */,
-				A18D2A330B861B99007D8D2C /* libtbb.dylib */,
-				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
-				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
-				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
-			);
-			name = "External Frameworks and Libraries";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8D0C4E890486CD37000505A6 /* PolygonOverlay */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */;
-			buildPhases = (
-				8D0C4E8C0486CD37000505A6 /* Resources */,
-				8D0C4E8F0486CD37000505A6 /* Sources */,
-				8D0C4E910486CD37000505A6 /* Frameworks */,
-				A18D2A370B861BB7007D8D2C /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = PolygonOverlay;
-			productInstallPath = "$(HOME)/Applications";
-			productName = PolygonOverlay;
-			productReference = 8D0C4E970486CD37000505A6 /* PolygonOverlay.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		20286C28FDCF999611CA2CEA /* Project object */ = {
-			isa = PBXProject;
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */;
-			hasScannedForEncodings = 1;
-			mainGroup = 20286C29FDCF999611CA2CEA /* PolygonOverlay */;
-			projectDirPath = "";
-			targets = (
-				8D0C4E890486CD37000505A6 /* PolygonOverlay */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		8D0C4E8C0486CD37000505A6 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
-				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8D0C4E8F0486CD37000505A6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
-				6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */,
-				6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */,
-				6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		02345980000FD03B11CA0E72 /* main.nib */ = {
-			isa = PBXVariantGroup;
-			children = (
-				1870340FFE93FCAF11CA0CD7 /* English */,
-			);
-			name = main.nib;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		C0E91AC608A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = PolygonOverlay;
-			};
-			name = Debug;
-		};
-		C0E91AC708A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = PolygonOverlay;
-			};
-			name = Release;
-		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = i386;
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.4;
-				PREBINDING = NO;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = i386;
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.4;
-				PREBINDING = NO;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91AC608A95435008D54AB /* Debug */,
-				C0E91AC708A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91ACA08A95435008D54AB /* Debug */,
-				C0E91ACB08A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
-}
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */; };
+		6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA900DA2C0B3008D95BD /* polyover.cpp */; };
+		6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */; };
+		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+		A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+		A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };
+		A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };
+		A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };
+		A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };
+		A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+		A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+		A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */,
+				A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+		32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PolygonOverlay.pch; sourceTree = "<group>"; };
+		6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = SOURCE_ROOT; };
+		6A6DAA8F0DA2C0B3008D95BD /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = SOURCE_ROOT; };
+		6A6DAA900DA2C0B3008D95BD /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = SOURCE_ROOT; };
+		6A6DAA910DA2C0B3008D95BD /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = SOURCE_ROOT; };
+		6A6DAA920DA2C0B3008D95BD /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = SOURCE_ROOT; };
+		6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = SOURCE_ROOT; };
+		6A6DAA940DA2C0B3008D95BD /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = SOURCE_ROOT; };
+		6A6DAA950DA2C0B3008D95BD /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = SOURCE_ROOT; };
+		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		8D0C4E970486CD37000505A6 /* PolygonOverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PolygonOverlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+		A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
+		A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+		A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
+		A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
+				A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
+				A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
+				A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */,
+				A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
+				A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		195DF8CFFE9D517E11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E970486CD37000505A6 /* PolygonOverlay.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		20286C29FDCF999611CA2CEA /* PolygonOverlay */ = {
+			isa = PBXGroup;
+			children = (
+				20286C2AFDCF999611CA2CEA /* Sources */,
+				20286C2CFDCF999611CA2CEA /* Resources */,
+				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+				195DF8CFFE9D517E11CA2CBB /* Products */,
+			);
+			name = PolygonOverlay;
+			sourceTree = "<group>";
+		};
+		20286C2AFDCF999611CA2CEA /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */,
+				6A6DAA8F0DA2C0B3008D95BD /* polymain.h */,
+				6A6DAA900DA2C0B3008D95BD /* polyover.cpp */,
+				6A6DAA910DA2C0B3008D95BD /* polyover.h */,
+				6A6DAA920DA2C0B3008D95BD /* pover_global.h */,
+				6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */,
+				6A6DAA940DA2C0B3008D95BD /* pover_video.h */,
+				6A6DAA950DA2C0B3008D95BD /* rpolygon.h */,
+				A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
+				A1F591AB0B8DFC9600073279 /* video.h */,
+				32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		20286C2CFDCF999611CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E960486CD37000505A6 /* Info.plist */,
+				02345980000FD03B11CA0E72 /* main.nib */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */,
+				A18D2A330B861B99007D8D2C /* libtbb.dylib */,
+				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
+				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
+				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D0C4E890486CD37000505A6 /* PolygonOverlay */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */;
+			buildPhases = (
+				8D0C4E8C0486CD37000505A6 /* Resources */,
+				8D0C4E8F0486CD37000505A6 /* Sources */,
+				8D0C4E910486CD37000505A6 /* Frameworks */,
+				A18D2A370B861BB7007D8D2C /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = PolygonOverlay;
+			productInstallPath = "$(HOME)/Applications";
+			productName = PolygonOverlay;
+			productReference = 8D0C4E970486CD37000505A6 /* PolygonOverlay.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		20286C28FDCF999611CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 20286C29FDCF999611CA2CEA /* PolygonOverlay */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8D0C4E890486CD37000505A6 /* PolygonOverlay */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
+				6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */,
+				6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */,
+				6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		02345980000FD03B11CA0E72 /* main.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				1870340FFE93FCAF11CA0CD7 /* English */,
+			);
+			name = main.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		C0E91AC608A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = PolygonOverlay;
+				GCC_VERSION = 4.0;
+			};
+			name = Debug;
+		};
+		C0E91AC708A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = "";
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = PolygonOverlay;
+				GCC_VERSION = 4.0;
+			};
+			name = Release;
+		};
+		C0E91ACA08A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = i386;
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		C0E91ACB08A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = i386;
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91AC608A95435008D54AB /* Debug */,
+				C0E91AC708A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91ACA08A95435008D54AB /* Debug */,
+				C0E91ACB08A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
index f860d85..0bf5323 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/examples/parallel_for/seismic/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
index ca12d88..bb6659a 100644
--- a/examples/parallel_for/seismic/Makefile.windows
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/seismic/SeismicSimulation.cpp b/examples/parallel_for/seismic/SeismicSimulation.cpp
index 6693918..c2f6060 100644
--- a/examples/parallel_for/seismic/SeismicSimulation.cpp
+++ b/examples/parallel_for/seismic/SeismicSimulation.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 ec43cf3..a49ef16 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/xcode/SeismicSimulation.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
index 3ba4b1c..26c1a6c 100644
--- a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
@@ -1,283 +1,285 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 42;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
-		A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
-		A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
-		A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };
-		A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };
-		A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
-		A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
-		A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */; };
-		A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
-		32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SeismicSimulation.pch; sourceTree = "<group>"; };
-		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
-		8D0C4E970486CD37000505A6 /* SeismicSimulation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SeismicSimulation.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
-		A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
-		A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
-		A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SeismicSimulation.cpp; path = ../SeismicSimulation.cpp; sourceTree = SOURCE_ROOT; };
-		A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
-		A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8D0C4E910486CD37000505A6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
-				A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
-				A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
-				A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
-				A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		195DF8CFFE9D517E11CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8D0C4E970486CD37000505A6 /* SeismicSimulation.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		20286C29FDCF999611CA2CEA /* SeismicSimulation */ = {
-			isa = PBXGroup;
-			children = (
-				20286C2AFDCF999611CA2CEA /* Sources */,
-				20286C2CFDCF999611CA2CEA /* Resources */,
-				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
-				195DF8CFFE9D517E11CA2CBB /* Products */,
-			);
-			name = SeismicSimulation;
-			sourceTree = "<group>";
-		};
-		20286C2AFDCF999611CA2CEA /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */,
-				A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
-				A1F591AB0B8DFC9600073279 /* video.h */,
-				32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		20286C2CFDCF999611CA2CEA /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				8D0C4E960486CD37000505A6 /* Info.plist */,
-				02345980000FD03B11CA0E72 /* main.nib */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
-			isa = PBXGroup;
-			children = (
-				A18D2A330B861B99007D8D2C /* libtbb.dylib */,
-				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
-				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
-				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
-			);
-			name = "External Frameworks and Libraries";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8D0C4E890486CD37000505A6 /* SeismicSimulation */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */;
-			buildPhases = (
-				8D0C4E8C0486CD37000505A6 /* Resources */,
-				8D0C4E8F0486CD37000505A6 /* Sources */,
-				8D0C4E910486CD37000505A6 /* Frameworks */,
-				A18D2A370B861BB7007D8D2C /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = SeismicSimulation;
-			productInstallPath = "$(HOME)/Applications";
-			productName = SeismicSimulation;
-			productReference = 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		20286C28FDCF999611CA2CEA /* Project object */ = {
-			isa = PBXProject;
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */;
-			hasScannedForEncodings = 1;
-			mainGroup = 20286C29FDCF999611CA2CEA /* SeismicSimulation */;
-			projectDirPath = "";
-			targets = (
-				8D0C4E890486CD37000505A6 /* SeismicSimulation */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		8D0C4E8C0486CD37000505A6 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
-				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8D0C4E8F0486CD37000505A6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */,
-				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		02345980000FD03B11CA0E72 /* main.nib */ = {
-			isa = PBXVariantGroup;
-			children = (
-				1870340FFE93FCAF11CA0CD7 /* English */,
-			);
-			name = main.nib;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		C0E91AC608A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = SeismicSimulation;
-			};
-			name = Debug;
-		};
-		C0E91AC708A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = SeismicSimulation;
-			};
-			name = Release;
-		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = i386;
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.4;
-				PREBINDING = NO;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = i386;
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.4;
-				PREBINDING = NO;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91AC608A95435008D54AB /* Debug */,
-				C0E91AC708A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91ACA08A95435008D54AB /* Debug */,
-				C0E91ACB08A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
-}
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+		A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+		A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };
+		A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };
+		A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+		A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+		A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */; };
+		A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+		32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SeismicSimulation.pch; sourceTree = "<group>"; };
+		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		8D0C4E970486CD37000505A6 /* SeismicSimulation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SeismicSimulation.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
+		A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+		A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SeismicSimulation.cpp; path = ../SeismicSimulation.cpp; sourceTree = SOURCE_ROOT; };
+		A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
+		A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
+				A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
+				A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
+				A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
+				A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		195DF8CFFE9D517E11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E970486CD37000505A6 /* SeismicSimulation.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		20286C29FDCF999611CA2CEA /* SeismicSimulation */ = {
+			isa = PBXGroup;
+			children = (
+				20286C2AFDCF999611CA2CEA /* Sources */,
+				20286C2CFDCF999611CA2CEA /* Resources */,
+				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+				195DF8CFFE9D517E11CA2CBB /* Products */,
+			);
+			name = SeismicSimulation;
+			sourceTree = "<group>";
+		};
+		20286C2AFDCF999611CA2CEA /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */,
+				A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
+				A1F591AB0B8DFC9600073279 /* video.h */,
+				32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		20286C2CFDCF999611CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E960486CD37000505A6 /* Info.plist */,
+				02345980000FD03B11CA0E72 /* main.nib */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A18D2A330B861B99007D8D2C /* libtbb.dylib */,
+				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
+				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
+				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D0C4E890486CD37000505A6 /* SeismicSimulation */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */;
+			buildPhases = (
+				8D0C4E8C0486CD37000505A6 /* Resources */,
+				8D0C4E8F0486CD37000505A6 /* Sources */,
+				8D0C4E910486CD37000505A6 /* Frameworks */,
+				A18D2A370B861BB7007D8D2C /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = SeismicSimulation;
+			productInstallPath = "$(HOME)/Applications";
+			productName = SeismicSimulation;
+			productReference = 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		20286C28FDCF999611CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 20286C29FDCF999611CA2CEA /* SeismicSimulation */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8D0C4E890486CD37000505A6 /* SeismicSimulation */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */,
+				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		02345980000FD03B11CA0E72 /* main.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				1870340FFE93FCAF11CA0CD7 /* English */,
+			);
+			name = main.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		C0E91AC608A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = SeismicSimulation;
+				GCC_VERSION = 4.0;
+			};
+			name = Debug;
+		};
+		C0E91AC708A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = "";
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = SeismicSimulation;
+				GCC_VERSION = 4.0;
+			};
+			name = Release;
+		};
+		C0E91ACA08A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = i386;
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		C0E91ACB08A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = i386;
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				MACH_O_TYPE = mh_execute;
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91AC608A95435008D54AB /* Debug */,
+				C0E91AC708A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91ACA08A95435008D54AB /* Debug */,
+				C0E91ACB08A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile
index 0758fdb..7f82e00 100644
--- a/examples/parallel_for/tachyon/Makefile
+++ b/examples/parallel_for/tachyon/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -161,7 +161,7 @@ endif
 
 clean: VERSION = *
 clean:
-	$(RM) $(EXE) *.o *.d
 ifeq ($(UI),mac)
 	rm -rf $(NAME).*
 endif
+	$(RM) $(EXE) *.o *.d
diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows
index 38cf165..420634e 100644
--- a/examples/parallel_for/tachyon/Makefile.windows
+++ b/examples/parallel_for/tachyon/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/tachyon/index.html b/examples/parallel_for/tachyon/index.html
index 98d98bd..51a0e1e 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 b68ff8e..8f3c00e 100644
--- a/examples/parallel_for/tachyon/src/api.cpp
+++ b/examples/parallel_for/tachyon/src/api.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 acd3830..bcabb2a 100644
--- a/examples/parallel_for/tachyon/src/api.h
+++ b/examples/parallel_for/tachyon/src/api.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 e03c774..d6b69a1 100644
--- a/examples/parallel_for/tachyon/src/apigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 bca7507..57221c7 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apitrigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 a61d4c8..bf9dabb 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.h
+++ b/examples/parallel_for/tachyon/src/apitrigeom.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 8d57525..2361cd5 100644
--- a/examples/parallel_for/tachyon/src/bndbox.cpp
+++ b/examples/parallel_for/tachyon/src/bndbox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 3e5b265..fbac4a0 100644
--- a/examples/parallel_for/tachyon/src/bndbox.h
+++ b/examples/parallel_for/tachyon/src/bndbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 5a38650..a961284 100644
--- a/examples/parallel_for/tachyon/src/box.cpp
+++ b/examples/parallel_for/tachyon/src/box.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 33d72fd..a0c2f38 100644
--- a/examples/parallel_for/tachyon/src/box.h
+++ b/examples/parallel_for/tachyon/src/box.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4e63179..17b6966 100644
--- a/examples/parallel_for/tachyon/src/camera.cpp
+++ b/examples/parallel_for/tachyon/src/camera.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 646303c..bda8973 100644
--- a/examples/parallel_for/tachyon/src/camera.h
+++ b/examples/parallel_for/tachyon/src/camera.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 860ae73..f801cdc 100644
--- a/examples/parallel_for/tachyon/src/coordsys.cpp
+++ b/examples/parallel_for/tachyon/src/coordsys.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 b938acb..91ce397 100644
--- a/examples/parallel_for/tachyon/src/coordsys.h
+++ b/examples/parallel_for/tachyon/src/coordsys.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 2bf4702..3601137 100644
--- a/examples/parallel_for/tachyon/src/cylinder.cpp
+++ b/examples/parallel_for/tachyon/src/cylinder.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6ec230a..606d6f1 100644
--- a/examples/parallel_for/tachyon/src/cylinder.h
+++ b/examples/parallel_for/tachyon/src/cylinder.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 dba8443..e44a2ab 100644
--- a/examples/parallel_for/tachyon/src/extvol.cpp
+++ b/examples/parallel_for/tachyon/src/extvol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 7883769..be9ceaa 100644
--- a/examples/parallel_for/tachyon/src/extvol.h
+++ b/examples/parallel_for/tachyon/src/extvol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 e3d6ca6..9b50535 100644
--- a/examples/parallel_for/tachyon/src/getargs.cpp
+++ b/examples/parallel_for/tachyon/src/getargs.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 454557f..b4b31e8 100644
--- a/examples/parallel_for/tachyon/src/getargs.h
+++ b/examples/parallel_for/tachyon/src/getargs.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 62695fd..73d8f46 100644
--- a/examples/parallel_for/tachyon/src/global.cpp
+++ b/examples/parallel_for/tachyon/src/global.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 28b6239..ccf4ccf 100644
--- a/examples/parallel_for/tachyon/src/global.h
+++ b/examples/parallel_for/tachyon/src/global.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 194c1a2..4569f99 100644
--- a/examples/parallel_for/tachyon/src/grid.cpp
+++ b/examples/parallel_for/tachyon/src/grid.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 7243ac9..04f1e83 100644
--- a/examples/parallel_for/tachyon/src/grid.h
+++ b/examples/parallel_for/tachyon/src/grid.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 2fe1d3b..947ced8 100644
--- a/examples/parallel_for/tachyon/src/imageio.cpp
+++ b/examples/parallel_for/tachyon/src/imageio.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 102cf66..4fca979 100644
--- a/examples/parallel_for/tachyon/src/imageio.h
+++ b/examples/parallel_for/tachyon/src/imageio.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 285bdd4..ae539f1 100644
--- a/examples/parallel_for/tachyon/src/imap.cpp
+++ b/examples/parallel_for/tachyon/src/imap.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4590ddc..8cea78a 100644
--- a/examples/parallel_for/tachyon/src/imap.h
+++ b/examples/parallel_for/tachyon/src/imap.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6ac6d5d..f31527c 100644
--- a/examples/parallel_for/tachyon/src/intersect.cpp
+++ b/examples/parallel_for/tachyon/src/intersect.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 f208c01..579126c 100644
--- a/examples/parallel_for/tachyon/src/intersect.h
+++ b/examples/parallel_for/tachyon/src/intersect.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 51a1497..30ecd82 100644
--- a/examples/parallel_for/tachyon/src/jpeg.cpp
+++ b/examples/parallel_for/tachyon/src/jpeg.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 234e024..2f3da6e 100644
--- a/examples/parallel_for/tachyon/src/jpeg.h
+++ b/examples/parallel_for/tachyon/src/jpeg.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 f7745f0..816175a 100644
--- a/examples/parallel_for/tachyon/src/light.cpp
+++ b/examples/parallel_for/tachyon/src/light.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 a6a485f..7f12f76 100644
--- a/examples/parallel_for/tachyon/src/light.h
+++ b/examples/parallel_for/tachyon/src/light.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 75c9571..a8ed0fb 100644
--- a/examples/parallel_for/tachyon/src/machine.h
+++ b/examples/parallel_for/tachyon/src/machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 87009ea..b463ec3 100644
--- a/examples/parallel_for/tachyon/src/macros.h
+++ b/examples/parallel_for/tachyon/src/macros.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 820afc2..c988600 100644
--- a/examples/parallel_for/tachyon/src/objbound.cpp
+++ b/examples/parallel_for/tachyon/src/objbound.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 574aff5..9094537 100644
--- a/examples/parallel_for/tachyon/src/objbound.h
+++ b/examples/parallel_for/tachyon/src/objbound.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 12550f3..23185a8 100644
--- a/examples/parallel_for/tachyon/src/parse.cpp
+++ b/examples/parallel_for/tachyon/src/parse.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 8b1e76e..6387103 100644
--- a/examples/parallel_for/tachyon/src/parse.h
+++ b/examples/parallel_for/tachyon/src/parse.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 991470e..2c4be49 100644
--- a/examples/parallel_for/tachyon/src/plane.cpp
+++ b/examples/parallel_for/tachyon/src/plane.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 173dc29..5902d90 100644
--- a/examples/parallel_for/tachyon/src/plane.h
+++ b/examples/parallel_for/tachyon/src/plane.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 687c614..274bd7f 100644
--- a/examples/parallel_for/tachyon/src/ppm.cpp
+++ b/examples/parallel_for/tachyon/src/ppm.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6d1cd03..c7256f7 100644
--- a/examples/parallel_for/tachyon/src/ppm.h
+++ b/examples/parallel_for/tachyon/src/ppm.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 8c75e13..db51022 100644
--- a/examples/parallel_for/tachyon/src/pthread.cpp
+++ b/examples/parallel_for/tachyon/src/pthread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 7fc054b..12c64ea 100644
--- a/examples/parallel_for/tachyon/src/pthread.h
+++ b/examples/parallel_for/tachyon/src/pthread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 5c586de..da8316b 100644
--- a/examples/parallel_for/tachyon/src/quadric.cpp
+++ b/examples/parallel_for/tachyon/src/quadric.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 5dbd13e..91370b1 100644
--- a/examples/parallel_for/tachyon/src/quadric.h
+++ b/examples/parallel_for/tachyon/src/quadric.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 45c5e45..5608703 100644
--- a/examples/parallel_for/tachyon/src/render.cpp
+++ b/examples/parallel_for/tachyon/src/render.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4460d8d..db7377c 100644
--- a/examples/parallel_for/tachyon/src/render.h
+++ b/examples/parallel_for/tachyon/src/render.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 1ef57eb..f5d6f94 100644
--- a/examples/parallel_for/tachyon/src/ring.cpp
+++ b/examples/parallel_for/tachyon/src/ring.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 2192598..4c4d8ea 100644
--- a/examples/parallel_for/tachyon/src/ring.h
+++ b/examples/parallel_for/tachyon/src/ring.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 f24d308..8a4bd74 100644
--- a/examples/parallel_for/tachyon/src/shade.cpp
+++ b/examples/parallel_for/tachyon/src/shade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 cc8fe7a..c91d4f4 100644
--- a/examples/parallel_for/tachyon/src/shade.h
+++ b/examples/parallel_for/tachyon/src/shade.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 1816954..881e95d 100644
--- a/examples/parallel_for/tachyon/src/sphere.cpp
+++ b/examples/parallel_for/tachyon/src/sphere.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 0056d01..a8e7722 100644
--- a/examples/parallel_for/tachyon/src/sphere.h
+++ b/examples/parallel_for/tachyon/src/sphere.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 d8d931f..d044faf 100644
--- a/examples/parallel_for/tachyon/src/texture.cpp
+++ b/examples/parallel_for/tachyon/src/texture.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 1abfa44..c6da2fa 100644
--- a/examples/parallel_for/tachyon/src/texture.h
+++ b/examples/parallel_for/tachyon/src/texture.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 99d0aa9..e193a0a 100644
--- a/examples/parallel_for/tachyon/src/tgafile.cpp
+++ b/examples/parallel_for/tachyon/src/tgafile.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 78c7c9a..0f5bed6 100644
--- a/examples/parallel_for/tachyon/src/tgafile.h
+++ b/examples/parallel_for/tachyon/src/tgafile.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 1afc930..d5e851c 100644
--- a/examples/parallel_for/tachyon/src/trace.h
+++ b/examples/parallel_for/tachyon/src/trace.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 613e090..ab1f68c 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 095a9c2..bfe687e 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 aacb9c7..7b19674 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 c3b7f73..66cc8d5 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 9a9ffbb..948b55c 100644
--- a/examples/parallel_for/tachyon/src/triangle.cpp
+++ b/examples/parallel_for/tachyon/src/triangle.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 ec536fc..3d383db 100644
--- a/examples/parallel_for/tachyon/src/triangle.h
+++ b/examples/parallel_for/tachyon/src/triangle.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4685acc..e853406 100644
--- a/examples/parallel_for/tachyon/src/types.h
+++ b/examples/parallel_for/tachyon/src/types.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 0c24231..7d0605b 100644
--- a/examples/parallel_for/tachyon/src/ui.cpp
+++ b/examples/parallel_for/tachyon/src/ui.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 07a63c8..ae2764d 100644
--- a/examples/parallel_for/tachyon/src/ui.h
+++ b/examples/parallel_for/tachyon/src/ui.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 518d960..01e9bc9 100644
--- a/examples/parallel_for/tachyon/src/util.cpp
+++ b/examples/parallel_for/tachyon/src/util.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 a00889f..cf3e197 100644
--- a/examples/parallel_for/tachyon/src/util.h
+++ b/examples/parallel_for/tachyon/src/util.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 b4d1fad..c75fd1e 100644
--- a/examples/parallel_for/tachyon/src/vector.cpp
+++ b/examples/parallel_for/tachyon/src/vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 fddf584..089ebec 100644
--- a/examples/parallel_for/tachyon/src/vector.h
+++ b/examples/parallel_for/tachyon/src/vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4eed93d..f7c795b 100644
--- a/examples/parallel_for/tachyon/src/video.cpp
+++ b/examples/parallel_for/tachyon/src/video.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 9bc633b..1e8652c 100644
--- a/examples/parallel_for/tachyon/src/video.h
+++ b/examples/parallel_for/tachyon/src/video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6fe32e3..7397039 100644
--- a/examples/parallel_for/tachyon/src/vol.cpp
+++ b/examples/parallel_for/tachyon/src/vol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 14083f5..168efa4 100644
--- a/examples/parallel_for/tachyon/src/vol.h
+++ b/examples/parallel_for/tachyon/src/vol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
index d0ac70f..e1669c6 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
@@ -1,914 +1,922 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 42;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
-		A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
-		A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
-		A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
-		A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
-		A1F58DCD0B8DF19700073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		A1F58DCE0B8DF19800073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
-		A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
-		A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
-		A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
-		A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
-		A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
-		A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
-		A1F58EA30B8DF32900073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
-		A1F58EA40B8DF32A00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
-		A1F58EA60B8DF32B00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
-		A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
-		A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */; };
-		A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */; };
-		A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */; };
-		A1F590C30B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
-		A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
-		A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
-		A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
-		A1F590C70B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
-		A1F590C80B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
-		A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
-		A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
-		A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
-		A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
-		A1F590CD0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
-		A1F590CE0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
-		A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
-		A1F590D00B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
-		A1F590D10B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
-		A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
-		A1F590D30B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
-		A1F590D40B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
-		A1F590D50B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
-		A1F590D60B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
-		A1F590D70B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
-		A1F590D80B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
-		A1F590D90B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
-		A1F590DA0B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
-		A1F590DB0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
-		A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
-		A1F590DD0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
-		A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
-		A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
-		A1F590E20B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
-		A1F590E30B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
-		A1F590E40B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
-		A1F590E50B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
-		A1F590E60B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
-		A1F590E70B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
-		A1F5910D0B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
-		A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
-		A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
-		A1F591100B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
-		A1F591110B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
-		A1F591120B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
-		A1F591130B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
-		A1F591140B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
-		A1F591150B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
-		A1F591160B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
-		A1F591170B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
-		A1F591180B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
-		A1F591190B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
-		A1F5911A0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
-		A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
-		A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
-		A1F5911D0B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
-		A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
-		A1F5911F0B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
-		A1F591200B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
-		A1F591210B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
-		A1F591220B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
-		A1F591230B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
-		A1F591240B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
-		A1F591250B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
-		A1F591260B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
-		A1F591270B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
-		A1F591280B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
-		A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
-		A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
-		A1F5912D0B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
-		A1F5912E0B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
-		A1F5912F0B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
-		A1F591300B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
-		A1F591310B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
-		A1F591320B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
-		A1F591330B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
-		A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
-		A1F591350B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
-		A1F591360B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
-		A1F591370B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
-		A1F591380B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
-		A1F591390B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
-		A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
-		A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
-		A1F5913C0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
-		A1F5913D0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
-		A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
-		A1F5913F0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
-		A1F591400B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
-		A1F591410B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
-		A1F591420B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
-		A1F591430B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
-		A1F591440B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
-		A1F591450B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
-		A1F591460B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
-		A1F591470B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
-		A1F591480B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
-		A1F591490B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
-		A1F5914A0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
-		A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
-		A1F5914C0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
-		A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
-		A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
-		A1F591510B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
-		A1F591520B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
-		A1F591530B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
-		A1F591540B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
-		A1F591550B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
-		A1F591560B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
-		A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
-		A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
-		A1F591600B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		A117DC910B8DC59A00F62CED /* Copy TBB lib */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */,
-			);
-			name = "Copy TBB lib";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58EE60B8DF4E100073279 /* Copy TBB lib */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */,
-			);
-			name = "Copy TBB lib";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
-		20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
-		32DBCF6D0370B57F00C91783 /* tachyon.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tachyon.pch; sourceTree = "<group>"; };
-		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
-		A117DC7A0B8DC08100F62CED /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
-		A117DC7F0B8DC09300F62CED /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		A117DC830B8DC0DE00F62CED /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
-		A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb.cpp; path = ../src/trace.tbb.cpp; sourceTree = SOURCE_ROOT; };
-		A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.threads.cpp; path = ../src/trace.threads.cpp; sourceTree = SOURCE_ROOT; };
-		A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb1d.cpp; path = ../src/trace.tbb1d.cpp; sourceTree = SOURCE_ROOT; };
-		A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.serial.cpp; path = ../src/trace.serial.cpp; sourceTree = SOURCE_ROOT; };
-		A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb1d.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F58D9C0B8DF06700073279 /* tachyon-serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-serial.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F590320B8DF7D100073279 /* api.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = SOURCE_ROOT; };
-		A1F590330B8DF7D100073279 /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = SOURCE_ROOT; };
-		A1F590340B8DF7D100073279 /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = SOURCE_ROOT; };
-		A1F590350B8DF7D100073279 /* box.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = SOURCE_ROOT; };
-		A1F590360B8DF7D100073279 /* camera.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = SOURCE_ROOT; };
-		A1F590370B8DF7D100073279 /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = SOURCE_ROOT; };
-		A1F590380B8DF7D100073279 /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = SOURCE_ROOT; };
-		A1F590390B8DF7D100073279 /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = SOURCE_ROOT; };
-		A1F5903A0B8DF7D100073279 /* getargs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getargs.h; path = ../src/getargs.h; sourceTree = SOURCE_ROOT; };
-		A1F5903B0B8DF7D100073279 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = SOURCE_ROOT; };
-		A1F5903C0B8DF7D100073279 /* grid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = SOURCE_ROOT; };
-		A1F5903D0B8DF7D100073279 /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = SOURCE_ROOT; };
-		A1F5903E0B8DF7D100073279 /* imap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = SOURCE_ROOT; };
-		A1F5903F0B8DF7D100073279 /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = SOURCE_ROOT; };
-		A1F590400B8DF7D100073279 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = SOURCE_ROOT; };
-		A1F590410B8DF7D100073279 /* light.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = SOURCE_ROOT; };
-		A1F590420B8DF7D100073279 /* machine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = SOURCE_ROOT; };
-		A1F590430B8DF7D100073279 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = SOURCE_ROOT; };
-		A1F590440B8DF7D100073279 /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = SOURCE_ROOT; };
-		A1F590450B8DF7D100073279 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = SOURCE_ROOT; };
-		A1F590460B8DF7D100073279 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = SOURCE_ROOT; };
-		A1F590470B8DF7D100073279 /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = SOURCE_ROOT; };
-		A1F590480B8DF7D100073279 /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = SOURCE_ROOT; };
-		A1F590490B8DF7D100073279 /* render.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = SOURCE_ROOT; };
-		A1F5904A0B8DF7D100073279 /* ring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = SOURCE_ROOT; };
-		A1F5904B0B8DF7D100073279 /* shade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = SOURCE_ROOT; };
-		A1F5904C0B8DF7D100073279 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = SOURCE_ROOT; };
-		A1F5904D0B8DF7D100073279 /* texture.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = SOURCE_ROOT; };
-		A1F5904E0B8DF7D100073279 /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = SOURCE_ROOT; };
-		A1F5904F0B8DF7D100073279 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = SOURCE_ROOT; };
-		A1F590500B8DF7D100073279 /* types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = SOURCE_ROOT; };
-		A1F590510B8DF7D100073279 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = SOURCE_ROOT; };
-		A1F590520B8DF7D100073279 /* util.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = SOURCE_ROOT; };
-		A1F590530B8DF7D100073279 /* vector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = SOURCE_ROOT; };
-		A1F590540B8DF7D100073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../src/video.h; sourceTree = SOURCE_ROOT; };
-		A1F590550B8DF7D100073279 /* vol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = SOURCE_ROOT; };
-		A1F5909E0B8DF81800073279 /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = api.cpp; path = ../src/api.cpp; sourceTree = SOURCE_ROOT; };
-		A1F5909F0B8DF81800073279 /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apigeom.cpp; path = ../src/apigeom.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A00B8DF81800073279 /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apitrigeom.cpp; path = ../src/apitrigeom.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A10B8DF81800073279 /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = bndbox.cpp; path = ../src/bndbox.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A20B8DF81800073279 /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = box.cpp; path = ../src/box.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A30B8DF81800073279 /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = camera.cpp; path = ../src/camera.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A40B8DF81800073279 /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = coordsys.cpp; path = ../src/coordsys.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A50B8DF81800073279 /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cylinder.cpp; path = ../src/cylinder.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A60B8DF81800073279 /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = extvol.cpp; path = ../src/extvol.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A70B8DF81800073279 /* getargs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = getargs.cpp; path = ../src/getargs.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A80B8DF81800073279 /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = global.cpp; path = ../src/global.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590A90B8DF81800073279 /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = grid.cpp; path = ../src/grid.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AA0B8DF81800073279 /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imageio.cpp; path = ../src/imageio.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AB0B8DF81800073279 /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imap.cpp; path = ../src/imap.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AC0B8DF81800073279 /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = intersect.cpp; path = ../src/intersect.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AD0B8DF81800073279 /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg.cpp; path = ../src/jpeg.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AE0B8DF81800073279 /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = light.cpp; path = ../src/light.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590AF0B8DF81800073279 /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = objbound.cpp; path = ../src/objbound.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B00B8DF81800073279 /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parse.cpp; path = ../src/parse.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B10B8DF81800073279 /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = plane.cpp; path = ../src/plane.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B20B8DF81800073279 /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ppm.cpp; path = ../src/ppm.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B30B8DF81800073279 /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = quadric.cpp; path = ../src/quadric.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B40B8DF81800073279 /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = render.cpp; path = ../src/render.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B50B8DF81800073279 /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ring.cpp; path = ../src/ring.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B60B8DF81800073279 /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = shade.cpp; path = ../src/shade.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B70B8DF81800073279 /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sphere.cpp; path = ../src/sphere.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B80B8DF81800073279 /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = texture.cpp; path = ../src/texture.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590B90B8DF81800073279 /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = tgafile.cpp; path = ../src/tgafile.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590BA0B8DF81800073279 /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace_rest.cpp; path = ../src/trace_rest.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590BD0B8DF81800073279 /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = triangle.cpp; path = ../src/triangle.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590BE0B8DF81800073279 /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ui.cpp; path = ../src/ui.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590BF0B8DF81800073279 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = ../src/util.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590C00B8DF81800073279 /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vector.cpp; path = ../src/vector.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590C10B8DF81800073279 /* video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = video.cpp; path = ../src/video.cpp; sourceTree = SOURCE_ROOT; };
-		A1F590C20B8DF81800073279 /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vol.cpp; path = ../src/vol.cpp; sourceTree = SOURCE_ROOT; };
-		A1F5915A0B8DF8FA00073279 /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = SOURCE_ROOT; };
-		A1F5915C0B8DF94400073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
-		A1F591610B8DF96500073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8D0C4E910486CD37000505A6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,
-				A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */,
-				A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */,
-				A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D900B8DF03600073279 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */,
-				A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */,
-				A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */,
-				A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D9A0B8DF06700073279 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */,
-				A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */,
-				A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		20286C29FDCF999611CA2CEA /* tachyon */ = {
-			isa = PBXGroup;
-			children = (
-				20286C2AFDCF999611CA2CEA /* Sources */,
-				20286C2CFDCF999611CA2CEA /* Resources */,
-				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
-				A1F58CD30B8DE85300073279 /* Products */,
-			);
-			name = tachyon;
-			sourceTree = "<group>";
-		};
-		20286C2AFDCF999611CA2CEA /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				A1F590310B8DF75E00073279 /* Tachyon */,
-				A1A8FB5F0B8CBB9E001C55B1 /* Render */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		20286C2CFDCF999611CA2CEA /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				8D0C4E960486CD37000505A6 /* Info.plist */,
-				02345980000FD03B11CA0E72 /* main.nib */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
-			isa = PBXGroup;
-			children = (
-				A117DC830B8DC0DE00F62CED /* libtbb.dylib */,
-				A117DC7F0B8DC09300F62CED /* OpenGL.framework */,
-				A117DC7A0B8DC08100F62CED /* AGL.framework */,
-				20286C33FDCF999611CA2CEA /* Carbon.framework */,
-			);
-			name = "External Frameworks and Libraries";
-			sourceTree = "<group>";
-		};
-		A1A8FB5F0B8CBB9E001C55B1 /* Render */ = {
-			isa = PBXGroup;
-			children = (
-				A1F5902F0B8DF71B00073279 /* Headers */,
-				A1F5902E0B8DF71200073279 /* Sources */,
-			);
-			name = Render;
-			sourceTree = "<group>";
-		};
-		A1F58CD30B8DE85300073279 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */,
-				A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */,
-				A1F58D9C0B8DF06700073279 /* tachyon-serial.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		A1F5902E0B8DF71200073279 /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				A1F5915C0B8DF94400073279 /* macvideo.cpp */,
-				A1F5909E0B8DF81800073279 /* api.cpp */,
-				A1F5909F0B8DF81800073279 /* apigeom.cpp */,
-				A1F590A00B8DF81800073279 /* apitrigeom.cpp */,
-				A1F590A10B8DF81800073279 /* bndbox.cpp */,
-				A1F590A20B8DF81800073279 /* box.cpp */,
-				A1F590A30B8DF81800073279 /* camera.cpp */,
-				A1F590A40B8DF81800073279 /* coordsys.cpp */,
-				A1F590A50B8DF81800073279 /* cylinder.cpp */,
-				A1F590A60B8DF81800073279 /* extvol.cpp */,
-				A1F590A70B8DF81800073279 /* getargs.cpp */,
-				A1F590A80B8DF81800073279 /* global.cpp */,
-				A1F590A90B8DF81800073279 /* grid.cpp */,
-				A1F590AA0B8DF81800073279 /* imageio.cpp */,
-				A1F590AB0B8DF81800073279 /* imap.cpp */,
-				A1F590AC0B8DF81800073279 /* intersect.cpp */,
-				A1F590AD0B8DF81800073279 /* jpeg.cpp */,
-				A1F590AE0B8DF81800073279 /* light.cpp */,
-				A1F590AF0B8DF81800073279 /* objbound.cpp */,
-				A1F590B00B8DF81800073279 /* parse.cpp */,
-				A1F590B10B8DF81800073279 /* plane.cpp */,
-				A1F590B20B8DF81800073279 /* ppm.cpp */,
-				A1F590B30B8DF81800073279 /* quadric.cpp */,
-				A1F590B40B8DF81800073279 /* render.cpp */,
-				A1F590B50B8DF81800073279 /* ring.cpp */,
-				A1F590B60B8DF81800073279 /* shade.cpp */,
-				A1F590B70B8DF81800073279 /* sphere.cpp */,
-				A1F590B80B8DF81800073279 /* texture.cpp */,
-				A1F590B90B8DF81800073279 /* tgafile.cpp */,
-				A1F590BA0B8DF81800073279 /* trace_rest.cpp */,
-				A1F590BD0B8DF81800073279 /* triangle.cpp */,
-				A1F590BE0B8DF81800073279 /* ui.cpp */,
-				A1F590BF0B8DF81800073279 /* util.cpp */,
-				A1F590C00B8DF81800073279 /* vector.cpp */,
-				A1F590C10B8DF81800073279 /* video.cpp */,
-				A1F590C20B8DF81800073279 /* vol.cpp */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		A1F5902F0B8DF71B00073279 /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				A1F591610B8DF96500073279 /* video.h */,
-				A1F5915A0B8DF8FA00073279 /* triangle.h */,
-				A1F590320B8DF7D100073279 /* api.h */,
-				A1F590330B8DF7D100073279 /* apitrigeom.h */,
-				A1F590340B8DF7D100073279 /* bndbox.h */,
-				A1F590350B8DF7D100073279 /* box.h */,
-				A1F590360B8DF7D100073279 /* camera.h */,
-				A1F590370B8DF7D100073279 /* coordsys.h */,
-				A1F590380B8DF7D100073279 /* cylinder.h */,
-				A1F590390B8DF7D100073279 /* extvol.h */,
-				A1F5903A0B8DF7D100073279 /* getargs.h */,
-				A1F5903B0B8DF7D100073279 /* global.h */,
-				A1F5903C0B8DF7D100073279 /* grid.h */,
-				A1F5903D0B8DF7D100073279 /* imageio.h */,
-				A1F5903E0B8DF7D100073279 /* imap.h */,
-				A1F5903F0B8DF7D100073279 /* intersect.h */,
-				A1F590400B8DF7D100073279 /* jpeg.h */,
-				A1F590410B8DF7D100073279 /* light.h */,
-				A1F590420B8DF7D100073279 /* machine.h */,
-				A1F590430B8DF7D100073279 /* macros.h */,
-				A1F590440B8DF7D100073279 /* objbound.h */,
-				A1F590450B8DF7D100073279 /* parse.h */,
-				A1F590460B8DF7D100073279 /* plane.h */,
-				A1F590470B8DF7D100073279 /* ppm.h */,
-				A1F590480B8DF7D100073279 /* quadric.h */,
-				A1F590490B8DF7D100073279 /* render.h */,
-				A1F5904A0B8DF7D100073279 /* ring.h */,
-				A1F5904B0B8DF7D100073279 /* shade.h */,
-				A1F5904C0B8DF7D100073279 /* sphere.h */,
-				A1F5904D0B8DF7D100073279 /* texture.h */,
-				A1F5904E0B8DF7D100073279 /* tgafile.h */,
-				A1F5904F0B8DF7D100073279 /* trace.h */,
-				A1F590500B8DF7D100073279 /* types.h */,
-				A1F590510B8DF7D100073279 /* ui.h */,
-				A1F590520B8DF7D100073279 /* util.h */,
-				A1F590530B8DF7D100073279 /* vector.h */,
-				A1F590540B8DF7D100073279 /* video.h */,
-				A1F590550B8DF7D100073279 /* vol.h */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		A1F590310B8DF75E00073279 /* Tachyon */ = {
-			isa = PBXGroup;
-			children = (
-				A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */,
-				A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */,
-				A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */,
-				A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */,
-				32DBCF6D0370B57F00C91783 /* tachyon.pch */,
-			);
-			name = Tachyon;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8D0C4E890486CD37000505A6 /* tachyon-tbb */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */;
-			buildPhases = (
-				8D0C4E8C0486CD37000505A6 /* Resources */,
-				8D0C4E8F0486CD37000505A6 /* Sources */,
-				8D0C4E910486CD37000505A6 /* Frameworks */,
-				A117DC910B8DC59A00F62CED /* Copy TBB lib */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "tachyon-tbb";
-			productInstallPath = "$(HOME)/Applications";
-			productName = tachyon;
-			productReference = A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A1F58D910B8DF03600073279 /* tachyon-tbb1d */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */;
-			buildPhases = (
-				A1F58D8E0B8DF03600073279 /* Resources */,
-				A1F58D8F0B8DF03600073279 /* Sources */,
-				A1F58D900B8DF03600073279 /* Frameworks */,
-				A1F58EE60B8DF4E100073279 /* Copy TBB lib */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "tachyon-tbb1d";
-			productName = "tachyon-tbb1d";
-			productReference = A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A1F58D9B0B8DF06700073279 /* tachyon-serial */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */;
-			buildPhases = (
-				A1F58D980B8DF06700073279 /* Resources */,
-				A1F58D990B8DF06700073279 /* Sources */,
-				A1F58D9A0B8DF06700073279 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "tachyon-serial";
-			productName = "tachyon-serial";
-			productReference = A1F58D9C0B8DF06700073279 /* tachyon-serial.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		20286C28FDCF999611CA2CEA /* Project object */ = {
-			isa = PBXProject;
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */;
-			hasScannedForEncodings = 1;
-			mainGroup = 20286C29FDCF999611CA2CEA /* tachyon */;
-			productRefGroup = A1F58CD30B8DE85300073279 /* Products */;
-			projectDirPath = "";
-			targets = (
-				A1F58D9B0B8DF06700073279 /* tachyon-serial */,
-				A1F58D910B8DF03600073279 /* tachyon-tbb1d */,
-				8D0C4E890486CD37000505A6 /* tachyon-tbb */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		8D0C4E8C0486CD37000505A6 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
-				A1F58EA30B8DF32900073279 /* Info.plist in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D8E0B8DF03600073279 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F58DCD0B8DF19700073279 /* main.nib in Resources */,
-				A1F58EA40B8DF32A00073279 /* Info.plist in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D980B8DF06700073279 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F58DCE0B8DF19800073279 /* main.nib in Resources */,
-				A1F58EA60B8DF32B00073279 /* Info.plist in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8D0C4E8F0486CD37000505A6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */,
-				A1F591320B8DF81800073279 /* api.cpp in Sources */,
-				A1F591330B8DF81800073279 /* apigeom.cpp in Sources */,
-				A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */,
-				A1F591350B8DF81800073279 /* bndbox.cpp in Sources */,
-				A1F591360B8DF81800073279 /* box.cpp in Sources */,
-				A1F591370B8DF81800073279 /* camera.cpp in Sources */,
-				A1F591380B8DF81800073279 /* coordsys.cpp in Sources */,
-				A1F591390B8DF81800073279 /* cylinder.cpp in Sources */,
-				A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */,
-				A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */,
-				A1F5913C0B8DF81800073279 /* global.cpp in Sources */,
-				A1F5913D0B8DF81800073279 /* grid.cpp in Sources */,
-				A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */,
-				A1F5913F0B8DF81800073279 /* imap.cpp in Sources */,
-				A1F591400B8DF81800073279 /* intersect.cpp in Sources */,
-				A1F591410B8DF81800073279 /* jpeg.cpp in Sources */,
-				A1F591420B8DF81800073279 /* light.cpp in Sources */,
-				A1F591430B8DF81800073279 /* objbound.cpp in Sources */,
-				A1F591440B8DF81800073279 /* parse.cpp in Sources */,
-				A1F591450B8DF81800073279 /* plane.cpp in Sources */,
-				A1F591460B8DF81800073279 /* ppm.cpp in Sources */,
-				A1F591470B8DF81800073279 /* quadric.cpp in Sources */,
-				A1F591480B8DF81800073279 /* render.cpp in Sources */,
-				A1F591490B8DF81800073279 /* ring.cpp in Sources */,
-				A1F5914A0B8DF81800073279 /* shade.cpp in Sources */,
-				A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */,
-				A1F5914C0B8DF81800073279 /* texture.cpp in Sources */,
-				A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */,
-				A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */,
-				A1F591510B8DF81800073279 /* triangle.cpp in Sources */,
-				A1F591520B8DF81800073279 /* ui.cpp in Sources */,
-				A1F591530B8DF81800073279 /* util.cpp in Sources */,
-				A1F591540B8DF81800073279 /* vector.cpp in Sources */,
-				A1F591550B8DF81800073279 /* video.cpp in Sources */,
-				A1F591560B8DF81800073279 /* vol.cpp in Sources */,
-				A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D8F0B8DF03600073279 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */,
-				A1F5910D0B8DF81800073279 /* api.cpp in Sources */,
-				A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */,
-				A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */,
-				A1F591100B8DF81800073279 /* bndbox.cpp in Sources */,
-				A1F591110B8DF81800073279 /* box.cpp in Sources */,
-				A1F591120B8DF81800073279 /* camera.cpp in Sources */,
-				A1F591130B8DF81800073279 /* coordsys.cpp in Sources */,
-				A1F591140B8DF81800073279 /* cylinder.cpp in Sources */,
-				A1F591150B8DF81800073279 /* extvol.cpp in Sources */,
-				A1F591160B8DF81800073279 /* getargs.cpp in Sources */,
-				A1F591170B8DF81800073279 /* global.cpp in Sources */,
-				A1F591180B8DF81800073279 /* grid.cpp in Sources */,
-				A1F591190B8DF81800073279 /* imageio.cpp in Sources */,
-				A1F5911A0B8DF81800073279 /* imap.cpp in Sources */,
-				A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */,
-				A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */,
-				A1F5911D0B8DF81800073279 /* light.cpp in Sources */,
-				A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */,
-				A1F5911F0B8DF81800073279 /* parse.cpp in Sources */,
-				A1F591200B8DF81800073279 /* plane.cpp in Sources */,
-				A1F591210B8DF81800073279 /* ppm.cpp in Sources */,
-				A1F591220B8DF81800073279 /* quadric.cpp in Sources */,
-				A1F591230B8DF81800073279 /* render.cpp in Sources */,
-				A1F591240B8DF81800073279 /* ring.cpp in Sources */,
-				A1F591250B8DF81800073279 /* shade.cpp in Sources */,
-				A1F591260B8DF81800073279 /* sphere.cpp in Sources */,
-				A1F591270B8DF81800073279 /* texture.cpp in Sources */,
-				A1F591280B8DF81800073279 /* tgafile.cpp in Sources */,
-				A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */,
-				A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */,
-				A1F5912D0B8DF81800073279 /* ui.cpp in Sources */,
-				A1F5912E0B8DF81800073279 /* util.cpp in Sources */,
-				A1F5912F0B8DF81800073279 /* vector.cpp in Sources */,
-				A1F591300B8DF81800073279 /* video.cpp in Sources */,
-				A1F591310B8DF81800073279 /* vol.cpp in Sources */,
-				A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A1F58D990B8DF06700073279 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */,
-				A1F590C30B8DF81800073279 /* api.cpp in Sources */,
-				A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */,
-				A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */,
-				A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */,
-				A1F590C70B8DF81800073279 /* box.cpp in Sources */,
-				A1F590C80B8DF81800073279 /* camera.cpp in Sources */,
-				A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */,
-				A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */,
-				A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */,
-				A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */,
-				A1F590CD0B8DF81800073279 /* global.cpp in Sources */,
-				A1F590CE0B8DF81800073279 /* grid.cpp in Sources */,
-				A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */,
-				A1F590D00B8DF81800073279 /* imap.cpp in Sources */,
-				A1F590D10B8DF81800073279 /* intersect.cpp in Sources */,
-				A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */,
-				A1F590D30B8DF81800073279 /* light.cpp in Sources */,
-				A1F590D40B8DF81800073279 /* objbound.cpp in Sources */,
-				A1F590D50B8DF81800073279 /* parse.cpp in Sources */,
-				A1F590D60B8DF81800073279 /* plane.cpp in Sources */,
-				A1F590D70B8DF81800073279 /* ppm.cpp in Sources */,
-				A1F590D80B8DF81800073279 /* quadric.cpp in Sources */,
-				A1F590D90B8DF81800073279 /* render.cpp in Sources */,
-				A1F590DA0B8DF81800073279 /* ring.cpp in Sources */,
-				A1F590DB0B8DF81800073279 /* shade.cpp in Sources */,
-				A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */,
-				A1F590DD0B8DF81800073279 /* texture.cpp in Sources */,
-				A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */,
-				A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */,
-				A1F590E20B8DF81800073279 /* triangle.cpp in Sources */,
-				A1F590E30B8DF81800073279 /* ui.cpp in Sources */,
-				A1F590E40B8DF81800073279 /* util.cpp in Sources */,
-				A1F590E50B8DF81800073279 /* vector.cpp in Sources */,
-				A1F590E60B8DF81800073279 /* video.cpp in Sources */,
-				A1F590E70B8DF81800073279 /* vol.cpp in Sources */,
-				A1F591600B8DF94400073279 /* macvideo.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		02345980000FD03B11CA0E72 /* main.nib */ = {
-			isa = PBXVariantGroup;
-			children = (
-				1870340FFE93FCAF11CA0CD7 /* English */,
-			);
-			name = main.nib;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		A1F58D960B8DF03600073279 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PREBINDING = NO;
-				PRODUCT_NAME = "tachyon-tbb1d";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Debug;
-		};
-		A1F58D970B8DF03600073279 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PREBINDING = NO;
-				PRODUCT_NAME = "tachyon-tbb1d";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		A1F58DA00B8DF06700073279 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				PREBINDING = NO;
-				PRODUCT_NAME = "tachyon-serial";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Debug;
-		};
-		A1F58DA10B8DF06700073279 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				GCC_ENABLE_FIX_AND_CONTINUE = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				PREBINDING = NO;
-				PRODUCT_NAME = "tachyon-serial";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		C0E91AC608A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = tachyon.pch;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = "tachyon-tbb";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Debug;
-		};
-		C0E91AC708A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = tachyon.pch;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
-				PRODUCT_NAME = "tachyon-tbb";
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A1F58D960B8DF03600073279 /* Debug */,
-				A1F58D970B8DF03600073279 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A1F58DA00B8DF06700073279 /* Debug */,
-				A1F58DA10B8DF06700073279 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91AC608A95435008D54AB /* Debug */,
-				C0E91AC708A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C0E91ACA08A95435008D54AB /* Debug */,
-				C0E91ACB08A95435008D54AB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
-}
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+		A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+		A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+		A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+		A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+		A1F58DCD0B8DF19700073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		A1F58DCE0B8DF19800073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+		A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+		A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+		A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+		A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+		A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+		A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+		A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+		A1F58EA30B8DF32900073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A1F58EA40B8DF32A00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A1F58EA60B8DF32B00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+		A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+		A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */; };
+		A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */; };
+		A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */; };
+		A1F590C30B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+		A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+		A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+		A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+		A1F590C70B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+		A1F590C80B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+		A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+		A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+		A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+		A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+		A1F590CD0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+		A1F590CE0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+		A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+		A1F590D00B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+		A1F590D10B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+		A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+		A1F590D30B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+		A1F590D40B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+		A1F590D50B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+		A1F590D60B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+		A1F590D70B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+		A1F590D80B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+		A1F590D90B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+		A1F590DA0B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+		A1F590DB0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+		A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+		A1F590DD0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+		A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+		A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+		A1F590E20B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+		A1F590E30B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+		A1F590E40B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+		A1F590E50B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+		A1F590E60B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+		A1F590E70B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+		A1F5910D0B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+		A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+		A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+		A1F591100B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+		A1F591110B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+		A1F591120B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+		A1F591130B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+		A1F591140B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+		A1F591150B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+		A1F591160B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+		A1F591170B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+		A1F591180B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+		A1F591190B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+		A1F5911A0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+		A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+		A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+		A1F5911D0B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+		A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+		A1F5911F0B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+		A1F591200B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+		A1F591210B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+		A1F591220B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+		A1F591230B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+		A1F591240B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+		A1F591250B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+		A1F591260B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+		A1F591270B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+		A1F591280B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+		A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+		A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+		A1F5912D0B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+		A1F5912E0B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+		A1F5912F0B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+		A1F591300B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+		A1F591310B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+		A1F591320B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+		A1F591330B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+		A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+		A1F591350B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+		A1F591360B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+		A1F591370B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+		A1F591380B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+		A1F591390B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+		A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+		A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+		A1F5913C0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+		A1F5913D0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+		A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+		A1F5913F0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+		A1F591400B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+		A1F591410B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+		A1F591420B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+		A1F591430B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+		A1F591440B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+		A1F591450B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+		A1F591460B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+		A1F591470B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+		A1F591480B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+		A1F591490B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+		A1F5914A0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+		A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+		A1F5914C0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+		A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+		A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+		A1F591510B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+		A1F591520B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+		A1F591530B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+		A1F591540B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+		A1F591550B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+		A1F591560B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+		A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+		A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+		A1F591600B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		A117DC910B8DC59A00F62CED /* Copy TBB lib */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */,
+			);
+			name = "Copy TBB lib";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58EE60B8DF4E100073279 /* Copy TBB lib */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */,
+			);
+			name = "Copy TBB lib";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+		20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		32DBCF6D0370B57F00C91783 /* tachyon.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tachyon.pch; sourceTree = "<group>"; };
+		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		A117DC7A0B8DC08100F62CED /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
+		A117DC7F0B8DC09300F62CED /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+		A117DC830B8DC0DE00F62CED /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+		A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb.cpp; path = ../src/trace.tbb.cpp; sourceTree = SOURCE_ROOT; };
+		A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.threads.cpp; path = ../src/trace.threads.cpp; sourceTree = SOURCE_ROOT; };
+		A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb1d.cpp; path = ../src/trace.tbb1d.cpp; sourceTree = SOURCE_ROOT; };
+		A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.serial.cpp; path = ../src/trace.serial.cpp; sourceTree = SOURCE_ROOT; };
+		A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb1d.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F58D9C0B8DF06700073279 /* tachyon-serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-serial.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F590320B8DF7D100073279 /* api.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = SOURCE_ROOT; };
+		A1F590330B8DF7D100073279 /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = SOURCE_ROOT; };
+		A1F590340B8DF7D100073279 /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = SOURCE_ROOT; };
+		A1F590350B8DF7D100073279 /* box.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = SOURCE_ROOT; };
+		A1F590360B8DF7D100073279 /* camera.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = SOURCE_ROOT; };
+		A1F590370B8DF7D100073279 /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = SOURCE_ROOT; };
+		A1F590380B8DF7D100073279 /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = SOURCE_ROOT; };
+		A1F590390B8DF7D100073279 /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = SOURCE_ROOT; };
+		A1F5903A0B8DF7D100073279 /* getargs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getargs.h; path = ../src/getargs.h; sourceTree = SOURCE_ROOT; };
+		A1F5903B0B8DF7D100073279 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = SOURCE_ROOT; };
+		A1F5903C0B8DF7D100073279 /* grid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = SOURCE_ROOT; };
+		A1F5903D0B8DF7D100073279 /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = SOURCE_ROOT; };
+		A1F5903E0B8DF7D100073279 /* imap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = SOURCE_ROOT; };
+		A1F5903F0B8DF7D100073279 /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = SOURCE_ROOT; };
+		A1F590400B8DF7D100073279 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = SOURCE_ROOT; };
+		A1F590410B8DF7D100073279 /* light.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = SOURCE_ROOT; };
+		A1F590420B8DF7D100073279 /* machine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = SOURCE_ROOT; };
+		A1F590430B8DF7D100073279 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = SOURCE_ROOT; };
+		A1F590440B8DF7D100073279 /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = SOURCE_ROOT; };
+		A1F590450B8DF7D100073279 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = SOURCE_ROOT; };
+		A1F590460B8DF7D100073279 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = SOURCE_ROOT; };
+		A1F590470B8DF7D100073279 /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = SOURCE_ROOT; };
+		A1F590480B8DF7D100073279 /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = SOURCE_ROOT; };
+		A1F590490B8DF7D100073279 /* render.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = SOURCE_ROOT; };
+		A1F5904A0B8DF7D100073279 /* ring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = SOURCE_ROOT; };
+		A1F5904B0B8DF7D100073279 /* shade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = SOURCE_ROOT; };
+		A1F5904C0B8DF7D100073279 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = SOURCE_ROOT; };
+		A1F5904D0B8DF7D100073279 /* texture.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = SOURCE_ROOT; };
+		A1F5904E0B8DF7D100073279 /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = SOURCE_ROOT; };
+		A1F5904F0B8DF7D100073279 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = SOURCE_ROOT; };
+		A1F590500B8DF7D100073279 /* types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = SOURCE_ROOT; };
+		A1F590510B8DF7D100073279 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = SOURCE_ROOT; };
+		A1F590520B8DF7D100073279 /* util.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = SOURCE_ROOT; };
+		A1F590530B8DF7D100073279 /* vector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = SOURCE_ROOT; };
+		A1F590540B8DF7D100073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../src/video.h; sourceTree = SOURCE_ROOT; };
+		A1F590550B8DF7D100073279 /* vol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = SOURCE_ROOT; };
+		A1F5909E0B8DF81800073279 /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = api.cpp; path = ../src/api.cpp; sourceTree = SOURCE_ROOT; };
+		A1F5909F0B8DF81800073279 /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apigeom.cpp; path = ../src/apigeom.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A00B8DF81800073279 /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apitrigeom.cpp; path = ../src/apitrigeom.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A10B8DF81800073279 /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = bndbox.cpp; path = ../src/bndbox.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A20B8DF81800073279 /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = box.cpp; path = ../src/box.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A30B8DF81800073279 /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = camera.cpp; path = ../src/camera.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A40B8DF81800073279 /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = coordsys.cpp; path = ../src/coordsys.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A50B8DF81800073279 /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cylinder.cpp; path = ../src/cylinder.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A60B8DF81800073279 /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = extvol.cpp; path = ../src/extvol.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A70B8DF81800073279 /* getargs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = getargs.cpp; path = ../src/getargs.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A80B8DF81800073279 /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = global.cpp; path = ../src/global.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590A90B8DF81800073279 /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = grid.cpp; path = ../src/grid.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AA0B8DF81800073279 /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imageio.cpp; path = ../src/imageio.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AB0B8DF81800073279 /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imap.cpp; path = ../src/imap.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AC0B8DF81800073279 /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = intersect.cpp; path = ../src/intersect.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AD0B8DF81800073279 /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg.cpp; path = ../src/jpeg.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AE0B8DF81800073279 /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = light.cpp; path = ../src/light.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590AF0B8DF81800073279 /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = objbound.cpp; path = ../src/objbound.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B00B8DF81800073279 /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parse.cpp; path = ../src/parse.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B10B8DF81800073279 /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = plane.cpp; path = ../src/plane.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B20B8DF81800073279 /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ppm.cpp; path = ../src/ppm.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B30B8DF81800073279 /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = quadric.cpp; path = ../src/quadric.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B40B8DF81800073279 /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = render.cpp; path = ../src/render.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B50B8DF81800073279 /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ring.cpp; path = ../src/ring.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B60B8DF81800073279 /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = shade.cpp; path = ../src/shade.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B70B8DF81800073279 /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sphere.cpp; path = ../src/sphere.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B80B8DF81800073279 /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = texture.cpp; path = ../src/texture.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590B90B8DF81800073279 /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = tgafile.cpp; path = ../src/tgafile.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590BA0B8DF81800073279 /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace_rest.cpp; path = ../src/trace_rest.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590BD0B8DF81800073279 /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = triangle.cpp; path = ../src/triangle.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590BE0B8DF81800073279 /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ui.cpp; path = ../src/ui.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590BF0B8DF81800073279 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = ../src/util.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590C00B8DF81800073279 /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vector.cpp; path = ../src/vector.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590C10B8DF81800073279 /* video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = video.cpp; path = ../src/video.cpp; sourceTree = SOURCE_ROOT; };
+		A1F590C20B8DF81800073279 /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vol.cpp; path = ../src/vol.cpp; sourceTree = SOURCE_ROOT; };
+		A1F5915A0B8DF8FA00073279 /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = SOURCE_ROOT; };
+		A1F5915C0B8DF94400073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
+		A1F591610B8DF96500073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,
+				A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */,
+				A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */,
+				A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D900B8DF03600073279 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */,
+				A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */,
+				A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */,
+				A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D9A0B8DF06700073279 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */,
+				A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */,
+				A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		20286C29FDCF999611CA2CEA /* tachyon */ = {
+			isa = PBXGroup;
+			children = (
+				20286C2AFDCF999611CA2CEA /* Sources */,
+				20286C2CFDCF999611CA2CEA /* Resources */,
+				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+				A1F58CD30B8DE85300073279 /* Products */,
+			);
+			name = tachyon;
+			sourceTree = "<group>";
+		};
+		20286C2AFDCF999611CA2CEA /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				A1F590310B8DF75E00073279 /* Tachyon */,
+				A1A8FB5F0B8CBB9E001C55B1 /* Render */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		20286C2CFDCF999611CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				8D0C4E960486CD37000505A6 /* Info.plist */,
+				02345980000FD03B11CA0E72 /* main.nib */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				A117DC830B8DC0DE00F62CED /* libtbb.dylib */,
+				A117DC7F0B8DC09300F62CED /* OpenGL.framework */,
+				A117DC7A0B8DC08100F62CED /* AGL.framework */,
+				20286C33FDCF999611CA2CEA /* Carbon.framework */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+		A1A8FB5F0B8CBB9E001C55B1 /* Render */ = {
+			isa = PBXGroup;
+			children = (
+				A1F5902F0B8DF71B00073279 /* Headers */,
+				A1F5902E0B8DF71200073279 /* Sources */,
+			);
+			name = Render;
+			sourceTree = "<group>";
+		};
+		A1F58CD30B8DE85300073279 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */,
+				A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */,
+				A1F58D9C0B8DF06700073279 /* tachyon-serial.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F5902E0B8DF71200073279 /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				A1F5915C0B8DF94400073279 /* macvideo.cpp */,
+				A1F5909E0B8DF81800073279 /* api.cpp */,
+				A1F5909F0B8DF81800073279 /* apigeom.cpp */,
+				A1F590A00B8DF81800073279 /* apitrigeom.cpp */,
+				A1F590A10B8DF81800073279 /* bndbox.cpp */,
+				A1F590A20B8DF81800073279 /* box.cpp */,
+				A1F590A30B8DF81800073279 /* camera.cpp */,
+				A1F590A40B8DF81800073279 /* coordsys.cpp */,
+				A1F590A50B8DF81800073279 /* cylinder.cpp */,
+				A1F590A60B8DF81800073279 /* extvol.cpp */,
+				A1F590A70B8DF81800073279 /* getargs.cpp */,
+				A1F590A80B8DF81800073279 /* global.cpp */,
+				A1F590A90B8DF81800073279 /* grid.cpp */,
+				A1F590AA0B8DF81800073279 /* imageio.cpp */,
+				A1F590AB0B8DF81800073279 /* imap.cpp */,
+				A1F590AC0B8DF81800073279 /* intersect.cpp */,
+				A1F590AD0B8DF81800073279 /* jpeg.cpp */,
+				A1F590AE0B8DF81800073279 /* light.cpp */,
+				A1F590AF0B8DF81800073279 /* objbound.cpp */,
+				A1F590B00B8DF81800073279 /* parse.cpp */,
+				A1F590B10B8DF81800073279 /* plane.cpp */,
+				A1F590B20B8DF81800073279 /* ppm.cpp */,
+				A1F590B30B8DF81800073279 /* quadric.cpp */,
+				A1F590B40B8DF81800073279 /* render.cpp */,
+				A1F590B50B8DF81800073279 /* ring.cpp */,
+				A1F590B60B8DF81800073279 /* shade.cpp */,
+				A1F590B70B8DF81800073279 /* sphere.cpp */,
+				A1F590B80B8DF81800073279 /* texture.cpp */,
+				A1F590B90B8DF81800073279 /* tgafile.cpp */,
+				A1F590BA0B8DF81800073279 /* trace_rest.cpp */,
+				A1F590BD0B8DF81800073279 /* triangle.cpp */,
+				A1F590BE0B8DF81800073279 /* ui.cpp */,
+				A1F590BF0B8DF81800073279 /* util.cpp */,
+				A1F590C00B8DF81800073279 /* vector.cpp */,
+				A1F590C10B8DF81800073279 /* video.cpp */,
+				A1F590C20B8DF81800073279 /* vol.cpp */,
+			);
+			name = Sources;
+			sourceTree = "<group>";
+		};
+		A1F5902F0B8DF71B00073279 /* Headers */ = {
+			isa = PBXGroup;
+			children = (
+				A1F591610B8DF96500073279 /* video.h */,
+				A1F5915A0B8DF8FA00073279 /* triangle.h */,
+				A1F590320B8DF7D100073279 /* api.h */,
+				A1F590330B8DF7D100073279 /* apitrigeom.h */,
+				A1F590340B8DF7D100073279 /* bndbox.h */,
+				A1F590350B8DF7D100073279 /* box.h */,
+				A1F590360B8DF7D100073279 /* camera.h */,
+				A1F590370B8DF7D100073279 /* coordsys.h */,
+				A1F590380B8DF7D100073279 /* cylinder.h */,
+				A1F590390B8DF7D100073279 /* extvol.h */,
+				A1F5903A0B8DF7D100073279 /* getargs.h */,
+				A1F5903B0B8DF7D100073279 /* global.h */,
+				A1F5903C0B8DF7D100073279 /* grid.h */,
+				A1F5903D0B8DF7D100073279 /* imageio.h */,
+				A1F5903E0B8DF7D100073279 /* imap.h */,
+				A1F5903F0B8DF7D100073279 /* intersect.h */,
+				A1F590400B8DF7D100073279 /* jpeg.h */,
+				A1F590410B8DF7D100073279 /* light.h */,
+				A1F590420B8DF7D100073279 /* machine.h */,
+				A1F590430B8DF7D100073279 /* macros.h */,
+				A1F590440B8DF7D100073279 /* objbound.h */,
+				A1F590450B8DF7D100073279 /* parse.h */,
+				A1F590460B8DF7D100073279 /* plane.h */,
+				A1F590470B8DF7D100073279 /* ppm.h */,
+				A1F590480B8DF7D100073279 /* quadric.h */,
+				A1F590490B8DF7D100073279 /* render.h */,
+				A1F5904A0B8DF7D100073279 /* ring.h */,
+				A1F5904B0B8DF7D100073279 /* shade.h */,
+				A1F5904C0B8DF7D100073279 /* sphere.h */,
+				A1F5904D0B8DF7D100073279 /* texture.h */,
+				A1F5904E0B8DF7D100073279 /* tgafile.h */,
+				A1F5904F0B8DF7D100073279 /* trace.h */,
+				A1F590500B8DF7D100073279 /* types.h */,
+				A1F590510B8DF7D100073279 /* ui.h */,
+				A1F590520B8DF7D100073279 /* util.h */,
+				A1F590530B8DF7D100073279 /* vector.h */,
+				A1F590540B8DF7D100073279 /* video.h */,
+				A1F590550B8DF7D100073279 /* vol.h */,
+			);
+			name = Headers;
+			sourceTree = "<group>";
+		};
+		A1F590310B8DF75E00073279 /* Tachyon */ = {
+			isa = PBXGroup;
+			children = (
+				A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */,
+				A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */,
+				A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */,
+				A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */,
+				32DBCF6D0370B57F00C91783 /* tachyon.pch */,
+			);
+			name = Tachyon;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D0C4E890486CD37000505A6 /* tachyon-tbb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */;
+			buildPhases = (
+				8D0C4E8C0486CD37000505A6 /* Resources */,
+				8D0C4E8F0486CD37000505A6 /* Sources */,
+				8D0C4E910486CD37000505A6 /* Frameworks */,
+				A117DC910B8DC59A00F62CED /* Copy TBB lib */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "tachyon-tbb";
+			productInstallPath = "$(HOME)/Applications";
+			productName = tachyon;
+			productReference = A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */;
+			productType = "com.apple.product-type.application";
+		};
+		A1F58D910B8DF03600073279 /* tachyon-tbb1d */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */;
+			buildPhases = (
+				A1F58D8E0B8DF03600073279 /* Resources */,
+				A1F58D8F0B8DF03600073279 /* Sources */,
+				A1F58D900B8DF03600073279 /* Frameworks */,
+				A1F58EE60B8DF4E100073279 /* Copy TBB lib */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "tachyon-tbb1d";
+			productName = "tachyon-tbb1d";
+			productReference = A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */;
+			productType = "com.apple.product-type.application";
+		};
+		A1F58D9B0B8DF06700073279 /* tachyon-serial */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */;
+			buildPhases = (
+				A1F58D980B8DF06700073279 /* Resources */,
+				A1F58D990B8DF06700073279 /* Sources */,
+				A1F58D9A0B8DF06700073279 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "tachyon-serial";
+			productName = "tachyon-serial";
+			productReference = A1F58D9C0B8DF06700073279 /* tachyon-serial.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		20286C28FDCF999611CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 20286C29FDCF999611CA2CEA /* tachyon */;
+			productRefGroup = A1F58CD30B8DE85300073279 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				A1F58D9B0B8DF06700073279 /* tachyon-serial */,
+				A1F58D910B8DF03600073279 /* tachyon-tbb1d */,
+				8D0C4E890486CD37000505A6 /* tachyon-tbb */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+				A1F58EA30B8DF32900073279 /* Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D8E0B8DF03600073279 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F58DCD0B8DF19700073279 /* main.nib in Resources */,
+				A1F58EA40B8DF32A00073279 /* Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D980B8DF06700073279 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F58DCE0B8DF19800073279 /* main.nib in Resources */,
+				A1F58EA60B8DF32B00073279 /* Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */,
+				A1F591320B8DF81800073279 /* api.cpp in Sources */,
+				A1F591330B8DF81800073279 /* apigeom.cpp in Sources */,
+				A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */,
+				A1F591350B8DF81800073279 /* bndbox.cpp in Sources */,
+				A1F591360B8DF81800073279 /* box.cpp in Sources */,
+				A1F591370B8DF81800073279 /* camera.cpp in Sources */,
+				A1F591380B8DF81800073279 /* coordsys.cpp in Sources */,
+				A1F591390B8DF81800073279 /* cylinder.cpp in Sources */,
+				A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */,
+				A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */,
+				A1F5913C0B8DF81800073279 /* global.cpp in Sources */,
+				A1F5913D0B8DF81800073279 /* grid.cpp in Sources */,
+				A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */,
+				A1F5913F0B8DF81800073279 /* imap.cpp in Sources */,
+				A1F591400B8DF81800073279 /* intersect.cpp in Sources */,
+				A1F591410B8DF81800073279 /* jpeg.cpp in Sources */,
+				A1F591420B8DF81800073279 /* light.cpp in Sources */,
+				A1F591430B8DF81800073279 /* objbound.cpp in Sources */,
+				A1F591440B8DF81800073279 /* parse.cpp in Sources */,
+				A1F591450B8DF81800073279 /* plane.cpp in Sources */,
+				A1F591460B8DF81800073279 /* ppm.cpp in Sources */,
+				A1F591470B8DF81800073279 /* quadric.cpp in Sources */,
+				A1F591480B8DF81800073279 /* render.cpp in Sources */,
+				A1F591490B8DF81800073279 /* ring.cpp in Sources */,
+				A1F5914A0B8DF81800073279 /* shade.cpp in Sources */,
+				A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */,
+				A1F5914C0B8DF81800073279 /* texture.cpp in Sources */,
+				A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */,
+				A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */,
+				A1F591510B8DF81800073279 /* triangle.cpp in Sources */,
+				A1F591520B8DF81800073279 /* ui.cpp in Sources */,
+				A1F591530B8DF81800073279 /* util.cpp in Sources */,
+				A1F591540B8DF81800073279 /* vector.cpp in Sources */,
+				A1F591550B8DF81800073279 /* video.cpp in Sources */,
+				A1F591560B8DF81800073279 /* vol.cpp in Sources */,
+				A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D8F0B8DF03600073279 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */,
+				A1F5910D0B8DF81800073279 /* api.cpp in Sources */,
+				A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */,
+				A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */,
+				A1F591100B8DF81800073279 /* bndbox.cpp in Sources */,
+				A1F591110B8DF81800073279 /* box.cpp in Sources */,
+				A1F591120B8DF81800073279 /* camera.cpp in Sources */,
+				A1F591130B8DF81800073279 /* coordsys.cpp in Sources */,
+				A1F591140B8DF81800073279 /* cylinder.cpp in Sources */,
+				A1F591150B8DF81800073279 /* extvol.cpp in Sources */,
+				A1F591160B8DF81800073279 /* getargs.cpp in Sources */,
+				A1F591170B8DF81800073279 /* global.cpp in Sources */,
+				A1F591180B8DF81800073279 /* grid.cpp in Sources */,
+				A1F591190B8DF81800073279 /* imageio.cpp in Sources */,
+				A1F5911A0B8DF81800073279 /* imap.cpp in Sources */,
+				A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */,
+				A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */,
+				A1F5911D0B8DF81800073279 /* light.cpp in Sources */,
+				A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */,
+				A1F5911F0B8DF81800073279 /* parse.cpp in Sources */,
+				A1F591200B8DF81800073279 /* plane.cpp in Sources */,
+				A1F591210B8DF81800073279 /* ppm.cpp in Sources */,
+				A1F591220B8DF81800073279 /* quadric.cpp in Sources */,
+				A1F591230B8DF81800073279 /* render.cpp in Sources */,
+				A1F591240B8DF81800073279 /* ring.cpp in Sources */,
+				A1F591250B8DF81800073279 /* shade.cpp in Sources */,
+				A1F591260B8DF81800073279 /* sphere.cpp in Sources */,
+				A1F591270B8DF81800073279 /* texture.cpp in Sources */,
+				A1F591280B8DF81800073279 /* tgafile.cpp in Sources */,
+				A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */,
+				A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */,
+				A1F5912D0B8DF81800073279 /* ui.cpp in Sources */,
+				A1F5912E0B8DF81800073279 /* util.cpp in Sources */,
+				A1F5912F0B8DF81800073279 /* vector.cpp in Sources */,
+				A1F591300B8DF81800073279 /* video.cpp in Sources */,
+				A1F591310B8DF81800073279 /* vol.cpp in Sources */,
+				A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		A1F58D990B8DF06700073279 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */,
+				A1F590C30B8DF81800073279 /* api.cpp in Sources */,
+				A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */,
+				A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */,
+				A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */,
+				A1F590C70B8DF81800073279 /* box.cpp in Sources */,
+				A1F590C80B8DF81800073279 /* camera.cpp in Sources */,
+				A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */,
+				A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */,
+				A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */,
+				A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */,
+				A1F590CD0B8DF81800073279 /* global.cpp in Sources */,
+				A1F590CE0B8DF81800073279 /* grid.cpp in Sources */,
+				A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */,
+				A1F590D00B8DF81800073279 /* imap.cpp in Sources */,
+				A1F590D10B8DF81800073279 /* intersect.cpp in Sources */,
+				A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */,
+				A1F590D30B8DF81800073279 /* light.cpp in Sources */,
+				A1F590D40B8DF81800073279 /* objbound.cpp in Sources */,
+				A1F590D50B8DF81800073279 /* parse.cpp in Sources */,
+				A1F590D60B8DF81800073279 /* plane.cpp in Sources */,
+				A1F590D70B8DF81800073279 /* ppm.cpp in Sources */,
+				A1F590D80B8DF81800073279 /* quadric.cpp in Sources */,
+				A1F590D90B8DF81800073279 /* render.cpp in Sources */,
+				A1F590DA0B8DF81800073279 /* ring.cpp in Sources */,
+				A1F590DB0B8DF81800073279 /* shade.cpp in Sources */,
+				A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */,
+				A1F590DD0B8DF81800073279 /* texture.cpp in Sources */,
+				A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */,
+				A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */,
+				A1F590E20B8DF81800073279 /* triangle.cpp in Sources */,
+				A1F590E30B8DF81800073279 /* ui.cpp in Sources */,
+				A1F590E40B8DF81800073279 /* util.cpp in Sources */,
+				A1F590E50B8DF81800073279 /* vector.cpp in Sources */,
+				A1F590E60B8DF81800073279 /* video.cpp in Sources */,
+				A1F590E70B8DF81800073279 /* vol.cpp in Sources */,
+				A1F591600B8DF94400073279 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		02345980000FD03B11CA0E72 /* main.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				1870340FFE93FCAF11CA0CD7 /* English */,
+			);
+			name = main.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		A1F58D960B8DF03600073279 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PREBINDING = NO;
+				PRODUCT_NAME = "tachyon-tbb1d";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		A1F58D970B8DF03600073279 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PREBINDING = NO;
+				PRODUCT_NAME = "tachyon-tbb1d";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		A1F58DA00B8DF06700073279 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PREBINDING = NO;
+				PRODUCT_NAME = "tachyon-serial";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		A1F58DA10B8DF06700073279 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PREBINDING = NO;
+				PRODUCT_NAME = "tachyon-serial";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		C0E91AC608A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = tachyon.pch;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = "tachyon-tbb";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		C0E91AC708A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = "";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = tachyon.pch;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+				);
+				LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+				PRODUCT_NAME = "tachyon-tbb";
+				GCC_VERSION = 4.0;
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		C0E91ACA08A95435008D54AB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		C0E91ACB08A95435008D54AB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";
+				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				GCC_VERSION = 4.0;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A1F58D960B8DF03600073279 /* Debug */,
+				A1F58D970B8DF03600073279 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A1F58DA00B8DF06700073279 /* Debug */,
+				A1F58DA10B8DF06700073279 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91AC608A95435008D54AB /* Debug */,
+				C0E91AC708A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C0E91ACA08A95435008D54AB /* Debug */,
+				C0E91ACB08A95435008D54AB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
index f3aa034..fa32a79 100644
--- a/examples/parallel_reduce/convex_hull/Makefile
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_reduce/convex_hull/Makefile.windows b/examples/parallel_reduce/convex_hull/Makefile.windows
index 0ec6df8..3d75fef 100644
--- a/examples/parallel_reduce/convex_hull/Makefile.windows
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_reduce/convex_hull/convex_hull.h b/examples/parallel_reduce/convex_hull/convex_hull.h
index bfed09d..e1a61e8 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
index 1166d06..e391b19 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 2e07129..359910a 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 3038b45..d3ee284 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/xcode/convex_hull.xcodeproj/project.pbxproj b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
index 7c7f7d5..3f808bd 100644
--- a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
+++ b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
@@ -148,9 +148,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* convex_hull */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* convex_hull_sample */,
 				A1F594EA0B8F4B5600073279 /* convex_hull_bench */,
@@ -185,6 +187,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -200,6 +203,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -218,11 +222,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -234,11 +238,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -246,10 +250,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -264,7 +271,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -283,6 +293,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -292,7 +303,6 @@
 				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;
@@ -304,6 +314,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -313,7 +324,6 @@
 				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;
@@ -326,6 +336,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -341,10 +352,13 @@
 		A1F594F00B8F4B8200073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -363,6 +377,7 @@
 				COPY_PHASE_STRIP = YES;
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -378,8 +393,11 @@
 		A1F594F20B8F4B8200073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
index 6843c14..419d320 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 9524ba5..3d295d6 100644
--- a/examples/parallel_reduce/primes/Makefile
+++ b/examples/parallel_reduce/primes/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
index 444696d..d5766fc 100644
--- a/examples/parallel_reduce/primes/Makefile.windows
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_reduce/primes/index.html b/examples/parallel_reduce/primes/index.html
index d3e7a88..42c42e5 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 55ddfa1..70d510a 100644
--- a/examples/parallel_reduce/primes/primes.cpp
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
index 02e2a41..515f685 100644
--- a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
+++ b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
@@ -104,9 +104,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* primes */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* primes */,
 			);
@@ -132,6 +134,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -147,6 +150,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -165,11 +169,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -181,11 +185,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -193,10 +197,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -211,7 +218,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -230,6 +240,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -239,7 +250,6 @@
 				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;
@@ -251,6 +261,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -260,7 +271,6 @@
 				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;
diff --git a/examples/parallel_while/index.html b/examples/parallel_while/index.html
index a7b7d78..c47ee8d 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 e642745..d664ec5 100644
--- a/examples/parallel_while/parallel_preorder/Graph.cpp
+++ b/examples/parallel_while/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 efab9a1..04dfc02 100644
--- a/examples/parallel_while/parallel_preorder/Graph.h
+++ b/examples/parallel_while/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 251ce6e..e6bf48d 100644
--- a/examples/parallel_while/parallel_preorder/Makefile
+++ b/examples/parallel_while/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_while/parallel_preorder/Makefile.windows b/examples/parallel_while/parallel_preorder/Makefile.windows
index 0abd775..e7371bf 100644
--- a/examples/parallel_while/parallel_preorder/Makefile.windows
+++ b/examples/parallel_while/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_while/parallel_preorder/Matrix.h b/examples/parallel_while/parallel_preorder/Matrix.h
index b7b47e6..b4d91a7 100644
--- a/examples/parallel_while/parallel_preorder/Matrix.h
+++ b/examples/parallel_while/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 4a64acb..86f0152 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 f129b75..df84654 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
index c89f216..d82d821 100644
--- a/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
+++ b/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
@@ -7,8 +7,8 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
 		05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };
+		05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.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 */
@@ -27,11 +27,11 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
-		05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
 		05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };
 		05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };
 		05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
+		05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
+		8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
 		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 */
 
@@ -111,9 +111,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* parallel_preorder */,
 			);
@@ -140,6 +142,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -155,6 +158,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -173,11 +177,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -189,11 +193,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -201,10 +205,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -219,7 +226,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -238,6 +248,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -247,7 +258,6 @@
 				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;
@@ -259,6 +269,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -268,7 +279,6 @@
 				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;
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
index dfa089e..9bbdd99 100644
--- a/examples/pipeline/index.html
+++ b/examples/pipeline/index.html
@@ -15,7 +15,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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/square/Makefile b/examples/pipeline/square/Makefile
index 0ec518c..6271f72 100644
--- a/examples/pipeline/square/Makefile
+++ b/examples/pipeline/square/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/pipeline/square/Makefile.windows b/examples/pipeline/square/Makefile.windows
index 15e6fe6..84d6f59 100644
--- a/examples/pipeline/square/Makefile.windows
+++ b/examples/pipeline/square/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/pipeline/square/gen_input.cpp b/examples/pipeline/square/gen_input.cpp
index a167bd6..0b4525f 100644
--- a/examples/pipeline/square/gen_input.cpp
+++ b/examples/pipeline/square/gen_input.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/pipeline/square/index.html b/examples/pipeline/square/index.html
index a2205eb..b64d566 100644
--- a/examples/pipeline/square/index.html
+++ b/examples/pipeline/square/index.html
@@ -60,7 +60,7 @@ Two additional targets for this example:
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/square/square.cpp b/examples/pipeline/square/square.cpp
index d518d6d..458a861 100644
--- a/examples/pipeline/square/square.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -94,7 +94,7 @@ private:
 };
 
 MyInputFilter::MyInputFilter( FILE* input_file_ ) : 
-    filter(/*is_serial=*/true),
+    filter(serial_in_order),
     input_file(input_file_),
     next_slice( TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE ) )
 { 
@@ -135,7 +135,7 @@ public:
 };
 
 MyTransformFilter::MyTransformFilter() : 
-    tbb::filter(/*ordered=*/false) 
+    tbb::filter(parallel) 
 {}  
 
 /*override*/void* MyTransformFilter::operator()( void* item ) {
@@ -172,7 +172,7 @@ public:
 };
 
 MyOutputFilter::MyOutputFilter( FILE* output_file ) : 
-    tbb::filter(/*is_serial=*/true),
+    tbb::filter(serial_in_order),
     my_output_file(output_file)
 {
 }
@@ -251,9 +251,6 @@ int run_pipeline( int nthreads )
     pipeline.run( nthreads*4 );
     tbb::tick_count t1 = tbb::tick_count::now();
 
-    // Remove filters from pipeline before they are implicitly destroyed.
-    pipeline.clear(); 
-
     fclose( output_file );
     fclose( input_file );
 
diff --git a/examples/pipeline/square/vc8/square.vcproj b/examples/pipeline/square/vc8/square.vcproj
index 7b30327..ea98ffe 100644
--- a/examples/pipeline/square/vc8/square.vcproj
+++ b/examples/pipeline/square/vc8/square.vcproj
@@ -31,7 +31,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -113,7 +113,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -195,7 +195,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -278,7 +278,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
diff --git a/examples/pipeline/square/vc8/square.vcproj.user b/examples/pipeline/square/vc8/square.vcproj.user
new file mode 100644
index 0000000..e7c2b92
--- /dev/null
+++ b/examples/pipeline/square/vc8/square.vcproj.user
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>
diff --git a/examples/pipeline/square/vc9/square.vcproj b/examples/pipeline/square/vc9/square.vcproj
index dbedc38..cd318b5 100644
--- a/examples/pipeline/square/vc9/square.vcproj
+++ b/examples/pipeline/square/vc9/square.vcproj
@@ -32,7 +32,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -112,7 +112,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -193,7 +193,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
@@ -274,7 +274,7 @@
 			<Tool
 				Name="VCCustomBuildTool"
 				Description="Constructing input.txt"
-				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+				CommandLine="$(OutDir)\gen_input >$(OutDir)\input.txt"
 				AdditionalDependencies="gen_input.exe"
 				Outputs="input.txt"
 			/>
diff --git a/examples/pipeline/square/vc9/square.vcproj.user b/examples/pipeline/square/vc9/square.vcproj.user
new file mode 100644
index 0000000..e7c2b92
--- /dev/null
+++ b/examples/pipeline/square/vc9/square.vcproj.user
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			>
+			<DebugSettings
+				WorkingDirectory="$(OutDir)"
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>
diff --git a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
index e6abea8..42a859f 100644
--- a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
+++ b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
@@ -208,6 +208,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -223,6 +224,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -241,11 +243,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -257,11 +259,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -275,6 +277,7 @@
 				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
 				GCC_MODEL_TUNING = G5;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				PREBINDING = NO;
 				PRODUCT_NAME = "gen-input";
@@ -285,8 +288,11 @@
 		6DA3F3E60DE5D36B0039CADE /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_MODEL_TUNING = G5;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				PREBINDING = NO;
 				PRODUCT_NAME = "gen-input";
@@ -301,6 +307,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_MODEL_TUNING = G5;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				PREBINDING = NO;
 				PRODUCT_NAME = "gen-input";
@@ -311,8 +318,11 @@
 		6DA3F3E80DE5D36B0039CADE /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_MODEL_TUNING = G5;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				PREBINDING = NO;
 				PRODUCT_NAME = "gen-input";
@@ -323,10 +333,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -341,7 +354,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -360,6 +376,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -369,7 +386,6 @@
 				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;
@@ -381,6 +397,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -390,7 +407,6 @@
 				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;
diff --git a/examples/pipeline/text_filter/Makefile b/examples/pipeline/text_filter/Makefile
index 53a2425..c1a0573 100644
--- a/examples/pipeline/text_filter/Makefile
+++ b/examples/pipeline/text_filter/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/pipeline/text_filter/Makefile.windows b/examples/pipeline/text_filter/Makefile.windows
index 1025132..3be94ab 100644
--- a/examples/pipeline/text_filter/Makefile.windows
+++ b/examples/pipeline/text_filter/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/pipeline/text_filter/index.html b/examples/pipeline/text_filter/index.html
index e6907f9..b416060 100644
--- a/examples/pipeline/text_filter/index.html
+++ b/examples/pipeline/text_filter/index.html
@@ -3,7 +3,7 @@
 
 <H2>Overview</H2>
 Text filter that demonstrates class pipeline.  
-The <A href=" ../../../doc/Tutorial.pdf">Tutorial</A> explains this example in detail.
+The TBB tutorial explains this example in detail.
 
 <H2>Files</H2>
 <DL>
@@ -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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 bd5247b..09797da 100644
--- a/examples/pipeline/text_filter/text_filter.cpp
+++ b/examples/pipeline/text_filter/text_filter.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -205,9 +205,6 @@ int run_pipeline( int nthreads )
     pipeline.run( MyInputFilter::n_buffer );
     tbb::tick_count t1 = tbb::tick_count::now();
 
-    // Remove filters from pipeline before they are implicitly destroyed.
-    pipeline.clear(); 
-
     fclose( output_file );
     fclose( input_file );
 
diff --git a/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj b/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
index af35b4e..20728ca 100644
--- a/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
+++ b/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
@@ -105,9 +105,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "text_filter" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* text_filter */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* text_filter */,
 			);
@@ -150,6 +152,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -165,6 +168,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -183,11 +187,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -199,11 +203,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -211,10 +215,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -229,7 +236,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -248,6 +258,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -257,7 +268,6 @@
 				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;
@@ -269,6 +279,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -278,7 +289,6 @@
 				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;
diff --git a/examples/task/index.html b/examples/task/index.html
index 9de11f8..0365ea0 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 ad97fe2..f7561cb 100644
--- a/examples/task/tree_sum/Makefile
+++ b/examples/task/tree_sum/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/task/tree_sum/Makefile.windows b/examples/task/tree_sum/Makefile.windows
index 4ecb59b..7757f80 100644
--- a/examples/task/tree_sum/Makefile.windows
+++ b/examples/task/tree_sum/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
index 4445c28..306e25a 100644
--- a/examples/task/tree_sum/OptimizedParallelSumTree.cpp
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 2f39bae..01cfeb2 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 33e34b1..a97df6c 100644
--- a/examples/task/tree_sum/SimpleParallelSumTree.cpp
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 c51248f..b789977 100644
--- a/examples/task/tree_sum/common.h
+++ b/examples/task/tree_sum/common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 259691e..c6f6d41 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 338b36a..3b687eb 100644
--- a/examples/task/tree_sum/main.cpp
+++ b/examples/task/tree_sum/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
index 618ee0b..0ee269a 100644
--- a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
+++ b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		05593A100B8F4F4500DE73AB /* common.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A0B0B8F4F4500DE73AB /* common.h */; };
 		05593A110B8F4F4500DE73AB /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0C0B8F4F4500DE73AB /* main.cpp */; };
 		05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */; };
 		05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */; };
@@ -33,13 +32,13 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };
 		05593A0B0B8F4F4500DE73AB /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../common.h; sourceTree = SOURCE_ROOT; };
 		05593A0C0B8F4F4500DE73AB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
 		05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
 		05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; };
 		05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
 		05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+		05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };
 		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 */
 
@@ -122,9 +121,11 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* tree_sum */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* tree_sum */,
 			);
@@ -153,6 +154,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -170,6 +172,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -190,11 +193,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -206,11 +209,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -218,10 +221,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -238,7 +244,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -259,6 +268,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -268,7 +278,6 @@
 				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;
@@ -280,6 +289,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -289,7 +299,6 @@
 				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;
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
index 232122f..9077906 100644
--- a/examples/test_all/fibonacci/Fibonacci.cpp
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/test_all/fibonacci/Makefile b/examples/test_all/fibonacci/Makefile
index 5112fe0..b439374 100644
--- a/examples/test_all/fibonacci/Makefile
+++ b/examples/test_all/fibonacci/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/test_all/fibonacci/Makefile.windows b/examples/test_all/fibonacci/Makefile.windows
index c75face..2f869fc 100644
--- a/examples/test_all/fibonacci/Makefile.windows
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/test_all/fibonacci/index.html b/examples/test_all/fibonacci/index.html
index 12c3462..df3f689 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/xcode/fibonacci.xcodeproj/project.pbxproj b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
index daabb37..280ad7e 100644
--- a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
+++ b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
@@ -103,10 +103,12 @@
 /* Begin PBXProject section */
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
-			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */;
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fibonacci" */;
+			compatibilityVersion = "Xcode 2.4";
 			hasScannedForEncodings = 1;
 			mainGroup = 08FB7794FE84155DC02AAC07 /* Fibonacci */;
 			projectDirPath = "";
+			projectRoot = "";
 			targets = (
 				8DD76F620486A84900D96B5E /* Fibonacci */,
 			);
@@ -132,6 +134,7 @@
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -147,6 +150,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -165,11 +169,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -181,11 +185,11 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				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;
@@ -193,10 +197,13 @@
 		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_FIX_AND_CONTINUE = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -211,7 +218,10 @@
 		A1F593C70B8F0E6E00073279 /* Release64 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = 4.0;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
@@ -230,6 +240,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -239,7 +250,6 @@
 				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;
@@ -251,6 +261,7 @@
 				ARCHS = i386;
 				GCC_ENABLE_CPP_RTTI = YES;
 				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				OTHER_CPLUSPLUSFLAGS = (
@@ -260,7 +271,6 @@
 				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;
@@ -279,7 +289,7 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */ = {
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fibonacci" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				1DEB923608733DC60010E9CD /* Debug */,
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
index ac1d3a5..84ea458 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 f80c5d4..dddfb9d 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/_concurrent_queue_internal.h b/include/tbb/_concurrent_queue_internal.h
index 418065d..5abb8d8 100644
--- a/include/tbb/_concurrent_queue_internal.h
+++ b/include/tbb/_concurrent_queue_internal.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -64,8 +64,6 @@ using namespace tbb::internal;
 
 typedef size_t ticket;
 
-static void* invalid_page;
-
 template<typename T> class micro_queue ;
 template<typename T> class micro_queue_pop_finalizer ;
 template<typename T> class concurrent_queue_base_v3;
@@ -109,6 +107,10 @@ public:
     char pad3[NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(atomic<size_t>)];
 } ;
 
+inline bool is_valid_page(const concurrent_queue_rep_base::page* p) {
+    return uintptr_t(p)>1;
+}
+
 //! Abstract class to define interface for page allocation/deallocation
 /**
  * For internal use only.
@@ -184,7 +186,7 @@ public:
 
     page* make_copy( concurrent_queue_base_v3<T>& base, const page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
 
-    void make_invalid( ticket k ) ;
+    void invalidate_page_and_rethrow( ticket k ) ;
 };
 
 template<typename T>
@@ -192,7 +194,7 @@ void micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k,
     atomic_backoff backoff;
     do {
         backoff.pause();
-        if( counter&0x1 ) {
+        if( counter&1 ) {
             ++rb.n_invalid_entries;
             throw_bad_last_alloc_exception_v4();
         }
@@ -210,7 +212,7 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
             p = pa.allocate_page();
         } catch (...) {
             ++base.my_rep->n_invalid_entries;
-            make_invalid( k );
+            invalidate_page_and_rethrow( k );
         }
         p->mask = 0;
         p->next = NULL;
@@ -220,7 +222,8 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
         
     if( p ) {
         spin_mutex::scoped_lock lock( page_mutex );
-        if( page* q = tail_page )
+        page* q = tail_page;
+        if( is_valid_page(q) )
             q->next = p;
         else
             head_page = p; 
@@ -269,7 +272,7 @@ micro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_qu
     page_mutex   = src.page_mutex;
 
     const page* srcp = src.head_page;
-    if( srcp ) {
+    if( is_valid_page(srcp) ) {
         ticket g_index = head_counter;
         try {
             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
@@ -294,7 +297,7 @@ micro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_qu
             }
             tail_page = cur_page;
         } catch (...) {
-            make_invalid( g_index );
+            invalidate_page_and_rethrow( g_index );
         }
     } else {
         head_page = tail_page = NULL;
@@ -303,18 +306,18 @@ micro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_qu
 }
 
 template<typename T>
-void micro_queue<T>::make_invalid( ticket k ) {
-    static page dummy = {static_cast<page*>((void*)1), 0};
-    // mark it so that no more pushes are allowed.
-    invalid_page = &dummy;
+void micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {
+    // Append an invalid page at address 1 so that no more pushes are allowed.
+    page* invalid_page = (page*)uintptr_t(1);
     {
         spin_mutex::scoped_lock lock( page_mutex );
         tail_counter = k+concurrent_queue_rep_base::n_queue+1;
-        if( page* q = tail_page )
-            q->next = static_cast<page*>(invalid_page);
+        page* q = tail_page;
+        if( is_valid_page(q) )
+            q->next = invalid_page;
         else
-            head_page = static_cast<page*>(invalid_page); 
-        tail_page = static_cast<page*>(invalid_page);
+            head_page = invalid_page;
+        tail_page = invalid_page;
     }
     throw;
 }
@@ -348,16 +351,16 @@ public:
 template<typename T>
 micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
     page* p = my_page;
-    if( p ) {
+    if( is_valid_page(p) ) {
         spin_mutex::scoped_lock lock( my_queue.page_mutex );
         page* q = p->next;
         my_queue.head_page = q;
-        if( !q ) {
+        if( !is_valid_page(q) ) {
             my_queue.tail_page = NULL;
         }
     }
     my_queue.head_counter = my_ticket;
-    if( p ) {
+    if( is_valid_page(p) ) {
         allocator.deallocate_page( p );
     }
 }
@@ -429,9 +432,11 @@ protected:
     concurrent_queue_base_v3( size_t item_size ) ;
 
     /* override */ virtual ~concurrent_queue_base_v3() {
+#if __TBB_USE_ASSERT
         size_t nq = my_rep->n_queue;
         for( size_t i=0; i<nq; i++ )
             __TBB_ASSERT( my_rep->array[i].tail_page==NULL, "pages were not freed properly" );
+#endif /* __TBB_USE_ASSERT */
         cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
     }
 
@@ -456,9 +461,9 @@ protected:
     /* note that the name may be misleading, but it remains so due to a historical accident. */
     void internal_finish_clear() ;
 
-    //! throw an exception
+    //! Obsolete
     void internal_throw_exception() const {
-        throw std::bad_alloc();
+        throw_exception( eid_bad_alloc );
     }
 
     //! copy internal representation
@@ -538,11 +543,12 @@ void concurrent_queue_base_v3<T>::internal_finish_clear() {
     size_t nq = r.n_queue;
     for( size_t i=0; i<nq; ++i ) {
         page* tp = r.array[i].tail_page;
-        __TBB_ASSERT( r.array[i].head_page==tp, "at most one page should remain" );
-        if( tp!=NULL) {
-            if( tp!=invalid_page ) deallocate_page( tp );
+        if( is_valid_page(tp) ) {
+            __TBB_ASSERT( r.array[i].head_page==tp, "at most one page should remain" );
+            deallocate_page( tp );
             r.array[i].tail_page = NULL;
-        }
+        } else 
+            __TBB_ASSERT( !is_valid_page(r.array[i].head_page), "head page pointer corrupt?" );
     }
 }
 
@@ -690,6 +696,12 @@ void concurrent_queue_iterator_base_v3<Value>::advance() {
 }
 
 template<typename T>
+static inline const concurrent_queue_base_v3<const T>& add_constness( const concurrent_queue_base_v3<T>& q )
+{
+    return *reinterpret_cast<const concurrent_queue_base_v3<const T> *>(&q) ;
+}
+
+template<typename T>
 static inline const concurrent_queue_iterator_base_v3<const T>& add_constness( const concurrent_queue_iterator_base_v3<T>& q )
 {
     return *reinterpret_cast<const concurrent_queue_iterator_base_v3<const T> *>(&q) ;
@@ -713,6 +725,12 @@ public: // workaround for MSVC
     {
     }
 
+    template<typename T>
+    concurrent_queue_iterator( const concurrent_queue_base_v3<T>& other ) :
+        concurrent_queue_iterator_base_v3<Value>(add_constness(other))
+    {
+    }
+
 public:
     concurrent_queue_iterator() {}
 
diff --git a/include/tbb/_tbb_windef.h b/include/tbb/_tbb_windef.h
index ceb697d..7ca1069 100644
--- a/include/tbb/_tbb_windef.h
+++ b/include/tbb/_tbb_windef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,9 +39,6 @@
 #if !defined(_MT)
 #error TBB requires linkage with multithreaded C/C++ runtime library. \
        Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.
-#elif !defined(_DLL)
-#pragma message("Warning: Using TBB together with static C/C++ runtime library is not recommended. " \
-                "Consider switching your project to multithreaded DLL runtime used by TBB.")
 #endif
 
 // Workaround for the problem with MVSC headers failing to define namespace std
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index f9a08df..c4b58e5 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 8f3517f..dd2cdcc 100644
--- a/include/tbb/atomic.h
+++ b/include/tbb/atomic.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
index fd20aa0..8c01630 100644
--- a/include/tbb/blocked_range.h
+++ b/include/tbb/blocked_range.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -57,7 +57,7 @@ public:
 
     //! Construct range with default-constructed values for begin and end.
     /** Requires that Value have a default constructor. */
-    blocked_range() : my_begin(), my_end() {}
+    blocked_range() : my_end(), my_begin() {}
 
     //! Construct range over half-open interval [begin,end), with the given grainsize.
     blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) : 
diff --git a/include/tbb/blocked_range2d.h b/include/tbb/blocked_range2d.h
index d0e48b9..d541f42 100644
--- a/include/tbb/blocked_range2d.h
+++ b/include/tbb/blocked_range2d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6b6742f..b0bfbe0 100644
--- a/include/tbb/blocked_range3d.h
+++ b/include/tbb/blocked_range3d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 449dcb1..5889682 100644
--- a/include/tbb/cache_aligned_allocator.h
+++ b/include/tbb/cache_aligned_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -99,7 +99,7 @@ public:
     }
 
     //! Copy-construct value at location pointed to by p.
-    void construct( pointer p, const value_type& value ) {new(static_cast<void*>(p)) value_type(value);}
+    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
 
     //! Destroy value at location pointed to by p.
     void destroy( pointer p ) {p->~value_type();}
diff --git a/include/tbb/combinable.h b/include/tbb/combinable.h
index 9122ffa..093c5bb 100644
--- a/include/tbb/combinable.h
+++ b/include/tbb/combinable.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/compat/ppl.h b/include/tbb/compat/ppl.h
index 998bd00..5c18f29 100644
--- a/include/tbb/compat/ppl.h
+++ b/include/tbb/compat/ppl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,6 +33,8 @@
 #include "../parallel_invoke.h"
 #include "../parallel_for_each.h"
 #include "../parallel_for.h"
+#include "../critical_section.h"
+#include "../tbb_exception.h"
 
 namespace Concurrency {
 
@@ -40,6 +42,7 @@ namespace Concurrency {
     using tbb::task_group_status;
     using tbb::task_group;
     using tbb::structured_task_group;
+    using tbb::invalid_multiple_scheduling;
     using tbb::missing_wait;
     using tbb::make_task;
 
@@ -52,6 +55,9 @@ namespace Concurrency {
     using tbb::parallel_invoke;
     using tbb::strict_ppl::parallel_for;
     using tbb::parallel_for_each;
+    using tbb::critical_section;
+
+    using tbb::improper_lock;
 
 } // namespace Concurrency
 
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index ea4138f..d21588e 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,16 +40,13 @@
 #include "spin_rw_mutex.h"
 #include "atomic.h"
 #include "aligned_space.h"
+#include "tbb_exception.h"
 #if TBB_USE_PERFORMANCE_WARNINGS
 #include <typeinfo>
 #endif
 
 namespace tbb {
 
-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 {
     //! ITT instrumented routine that loads pointer from location pointed to by src.
@@ -58,11 +55,27 @@ namespace internal {
     void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
     //! Routine that loads pointer from location pointed to by src without causing ITT to report a race.
     void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
+}
+
+//! hash_compare that is default argument for concurrent_hash_map
+template<typename Key>
+struct tbb_hash_compare {
+    static size_t hash( const Key& a ) { return tbb_hasher(a); }
+    static bool equal( const Key& a, const Key& b ) { return a == b; }
+};
+
+namespace interface4 {
+
+    template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >
+    class concurrent_hash_map;
+
+    namespace internal {
+
 
     //! Type of a hash code.
     typedef size_t hashcode_t;
     //! Node base type
-    struct hash_map_node_base : no_copy {
+    struct hash_map_node_base : tbb::internal::no_copy {
         //! Mutex type
         typedef spin_rw_mutex mutex_t;
         //! Scoped lock type for mutex
@@ -87,7 +100,7 @@ namespace internal {
         //! Node base type
         typedef hash_map_node_base node_base;
         //! Bucket type
-        struct bucket : no_copy {
+        struct bucket : tbb::internal::no_copy {
             //! Mutex type for buckets
             typedef spin_rw_mutex mutex_t;
             //! Scoped lock type for mutex
@@ -220,6 +233,16 @@ namespace internal {
             return &seg[h];
         }
 
+        // internal serial rehashing helper
+        void mark_rehashed_levels( hashcode_t h ) throw () {
+            segment_index_t s = segment_index_of( h );
+            while( segment_ptr_t seg = my_table[++s] )
+                if( seg[h].node_list == rehash_req ) {
+                    seg[h].node_list = empty_rehashed;
+                    mark_rehashed_levels( h + segment_base(s) );
+                }
+        }
+
         //! Check for mask race
         // Splitting into two functions should help inlining
         inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {
@@ -316,10 +339,10 @@ namespace internal {
         friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
     
         template<typename C, typename U>
-        friend class internal::hash_map_iterator;
+        friend class hash_map_iterator;
 
         template<typename I>
-        friend class internal::hash_map_range;
+        friend class hash_map_range;
 
         void advance_to_next_bucket() { // TODO?: refactor to iterator_base class
             size_t k = my_index+1;
@@ -338,7 +361,7 @@ namespace internal {
         }
 #if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
         template<typename Key, typename T, typename HashCompare, typename A>
-        friend class tbb::concurrent_hash_map;
+        friend class interface4::concurrent_hash_map;
 #else
     public: // workaround
 #endif
@@ -456,24 +479,24 @@ namespace internal {
         {}
 #if TBB_DEPRECATED
         //! Init range with iterators and grainsize specified
-        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize = 1 ) : 
+        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) : 
             my_begin(begin_), 
             my_end(end_),
-            my_grainsize(grainsize)
+            my_grainsize(grainsize_)
         {
             if(!my_end.my_index && !my_end.my_bucket) // end
                 my_end.my_index = my_end.my_map->my_mask + 1;
             set_midpoint();
-            __TBB_ASSERT( grainsize>0, "grainsize must be positive" );
+            __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
         }
 #endif
         //! Init range with container and grainsize specified
-        hash_map_range( const map_type &map, size_type grainsize = 1 ) : 
+        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) : 
             my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
-            my_grainsize( grainsize )
+            my_grainsize( grainsize_ )
         {
-            __TBB_ASSERT( grainsize>0, "grainsize must be positive" );
+            __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
             set_midpoint();
         }
         const Iterator& begin() const {return my_begin;}
@@ -500,40 +523,35 @@ namespace internal {
         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
             "[my_begin, my_midpoint) range should not be empty" );
     }
-} // namespace internal
+
+    } // internal
 //! @endcond
 
 //! Hash multiplier
 static const size_t hash_multiplier = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL;
+
 //! Hasher functions
 template<typename T>
-inline static size_t tbb_hasher( const T& t ) {
+inline size_t tbb_hasher( const T& t ) {
     return static_cast<size_t>( t ) * hash_multiplier;
 }
 template<typename P>
-inline static size_t tbb_hasher( P* ptr ) {
+inline size_t tbb_hasher( P* ptr ) {
     size_t const h = reinterpret_cast<size_t>( ptr );
     return (h >> 3) ^ h;
 }
 template<typename E, typename S, typename A>
-inline static size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {
+inline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {
     size_t h = 0;
     for( const E* c = s.c_str(); *c; c++ )
         h = static_cast<size_t>(*c) ^ (h * hash_multiplier);
     return h;
 }
 template<typename F, typename S>
-inline static size_t tbb_hasher( const std::pair<F,S>& p ) {
+inline size_t tbb_hasher( const std::pair<F,S>& p ) {
     return tbb_hasher(p.first) ^ tbb_hasher(p.second);
 }
 
-//! hash_compare - default argument
-template<typename T>
-struct tbb_hash_compare {
-    static size_t hash( const T& t ) { return tbb_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.
 
@@ -576,7 +594,7 @@ public:
     typedef Key key_type;
     typedef T mapped_type;
     typedef std::pair<const Key,T> value_type;
-    typedef internal::hash_map_base::size_type size_type;
+    typedef hash_map_base::size_type size_type;
     typedef ptrdiff_t difference_type;
     typedef value_type *pointer;
     typedef const value_type *const_pointer;
@@ -602,7 +620,8 @@ protected:
         // exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17
         void *operator new( size_t /*size*/, node_allocator_type &a ) {
             void *ptr = a.allocate(1);
-            if(!ptr) throw std::bad_alloc();
+            if(!ptr) 
+                tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
             return ptr;
         }
         // match placement-new form above to be called if exception thrown in constructor
@@ -667,6 +686,11 @@ protected:
     restart:
         for( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {
             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+#if TBB_USE_ASSERT
+            hashcode_t bmask = h & (mask>>1);
+            bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; // minimal mask of parent bucket
+            __TBB_ASSERT( (c & bmask) == (h & bmask), "hash() function changed for key in table" );
+#endif
             if( (c & mask) == h ) {
                 if( !b_old.is_writer() )
                     if( !b_old.upgrade_to_writer() ) {
@@ -782,6 +806,11 @@ public:
     }
 
 
+    //! Rehashes and optionally resizes the whole table.
+    /** Useful to optimize performance before or after concurrent operations.
+        Also enables using of find() and count() concurrent methods in serial context. */
+    void rehash(size_type n = 0);
+    
     //! Clear table
     void clear();
 
@@ -817,6 +846,9 @@ public:
     //! Upper bound on size.
     size_type max_size() const {return (~size_type(0))/sizeof(node);}
 
+    //! Returns the current number of buckets
+    size_type bucket_count() const { return my_mask+1; }
+
     //! return allocator object
     allocator_type get_allocator() const { return this->my_allocator; }
 
@@ -1023,14 +1055,18 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key
         // acquire the item
         if( !result->my_lock.try_acquire( n->mutex, write ) ) {
             // we are unlucky, prepare for longer wait
-            internal::atomic_backoff trials;
+            tbb::internal::atomic_backoff trials;
             do {
                 if( !trials.bounded_pause() ) {
                     // the wait takes really long, restart the operation
                     b.release();
                     __TBB_ASSERT( !op_insert || !return_value, "Can't acquire new item in locked bucket?" );
                     __TBB_Yield();
+#if TBB_USE_THREADING_TOOLS
+                    m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+#else
                     m = my_mask;
+#endif
                     goto restart;
                 }
             } while( !result->my_lock.try_acquire( n->mutex, write ) );
@@ -1049,7 +1085,7 @@ check_growth:
 
 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 {
+std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end_ ) const {
     hashcode_t h = my_hash_compare.hash( key );
     hashcode_t m = my_mask;
     __TBB_ASSERT((m&(m+1))==0, NULL);
@@ -1061,7 +1097,7 @@ std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range(
     }
     node *n = search_bucket( key, b );
     if( !n )
-        return std::make_pair(end, end);
+        return std::make_pair(end_, end_);
     iterator lower(*this, h, b, n), upper(lower);
     return std::make_pair(lower, ++upper);
 }
@@ -1072,7 +1108,11 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_acc
     node_base *const n = item_accessor.my_node;
     item_accessor.my_node = NULL; // we ought release accessor anyway
     hashcode_t const h = item_accessor.my_hash;
+#if TBB_USE_THREADING_TOOLS
+    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+#else
     hashcode_t m = my_mask;
+#endif
     do {
         // get bucket
         bucket_accessor b( this, h & m, /*writer=*/true );
@@ -1101,7 +1141,11 @@ template<typename Key, typename T, typename HashCompare, typename A>
 bool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {
     node_base *n;
     hashcode_t const h = my_hash_compare.hash( key );
+#if TBB_USE_THREADING_TOOLS
+    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+#else
     hashcode_t m = my_mask;
+#endif
 restart:
     {//lock scope
         // get bucket
@@ -1142,56 +1186,129 @@ 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>::rehash(size_type sz) {
+    reserve( sz ); // TODO: add reduction of number of buckets as well
+    hashcode_t mask = my_mask;
+    hashcode_t b = (mask+1)>>1; // size or first index of the last segment
+    __TBB_ASSERT((b&(b-1))==0, NULL);
+    bucket *bp = get_bucket( b ); // only the last segment should be scanned for rehashing
+    for(; b <= mask; b++, bp++ ) {
+        node_base *n = bp->node_list;
+        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, "Broken internal structure" );
+        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, "concurrent or unexpectedly terminated operation during rehash() execution" );
+        if( n == internal::rehash_req ) { // rehash bucket, conditional because rehashing of a previous bucket may affect this one
+            hashcode_t h = b; bucket *b_old = bp;
+            do {
+                __TBB_ASSERT( h > 1, "The lowermost buckets can't be rehashed" );
+                hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit
+                b_old = get_bucket( h &= m );
+            } while( b_old->node_list == internal::rehash_req );
+            // now h - is index of the root rehashed bucket b_old
+            mark_rehashed_levels( h ); // mark all non-rehashed children recursively across all segments
+            for( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {
+                hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );
+                if( (c & mask) != h ) { // should be rehashed
+                    *p = q->next; // exclude from b_old
+                    bucket *b_new = get_bucket( c & mask );
+                    __TBB_ASSERT( b_new->node_list != internal::rehash_req, "hash() function changed for key in table or internal error" );
+                    add_to_bucket( b_new, q );
+                } else p = &q->next; // iterate to next item
+            }
+        }
+    }
+#if TBB_USE_PERFORMANCE_WARNINGS
+    int current_size = int(my_size), buckets = int(mask)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics
+    static bool reported = false;
+#endif
+#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
+    for( b = 0; b <= mask; b++ ) {// only last segment should be scanned for rehashing
+        if( b & (b-2) ) ++bp; // not the beginning of a segment
+        else bp = get_bucket( b );
+        node_base *n = bp->node_list;
+        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, "concurrent or unexpectedly terminated operation during rehash() execution" );
+        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, "Broken internal structure" );
+#if TBB_USE_PERFORMANCE_WARNINGS
+        if( n == internal::empty_rehashed ) empty_buckets++;
+        else if( n->next ) overpopulated_buckets++;
+#endif
+#if TBB_USE_ASSERT
+        for( ; is_valid(n); n = n->next ) {
+            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;
+            __TBB_ASSERT( h == b, "hash() function changed for key in table or internal error" );
+        }
+#endif
+    }
+#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS
+    if( buckets > current_size) empty_buckets -= buckets - current_size;
+    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?
+    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+        tbb::internal::runtime_warning(
+            "Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d",
+            typeid(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+        reported = true;
+    }
+#endif
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
 void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
     hashcode_t m = my_mask;
     __TBB_ASSERT((m&(m+1))==0, NULL);
-#if TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
 #if TBB_USE_PERFORMANCE_WARNINGS
-    int size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics
+    int current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics
     static bool reported = false;
 #endif
+    bucket *bp = 0;
     // check consistency
     for( segment_index_t b = 0; b <= m; b++ ) {
-        node_base *n = get_bucket(b)->node_list;
+        if( b & (b-2) ) ++bp; // not the beginning of a segment
+        else bp = get_bucket( b );
+        node_base *n = bp->node_list;
+        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, "Broken internal structure" );
+        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, "concurrent or unexpectedly terminated operation during clear() execution" );
 #if TBB_USE_PERFORMANCE_WARNINGS
         if( n == internal::empty_rehashed ) empty_buckets++;
         else if( n == internal::rehash_req ) buckets--;
         else if( n->next ) overpopulated_buckets++;
 #endif
+#if __TBB_EXTRA_DEBUG
         for(; is_valid(n); n = n->next ) {
             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
             h &= m;
-            __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, "Rehashing is not finished until serial stage due to concurrent or unexpectedly terminated operation" );
+            __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, "hash() function changed for key in table or internal error" );
         }
+#endif
     }
 #if TBB_USE_PERFORMANCE_WARNINGS
-    if( buckets > size) empty_buckets -= buckets - size;
-    else overpopulated_buckets -= size - buckets; // TODO: load_factor?
-    if( !reported && buckets >= 512 && ( 2*empty_buckets >= size || 2*overpopulated_buckets > size ) ) {
-        internal::runtime_warning(
+    if( buckets > current_size) empty_buckets -= buckets - current_size;
+    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?
+    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+        tbb::internal::runtime_warning(
             "Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d",
-            typeid(*this).name(), size, empty_buckets, overpopulated_buckets );
+            typeid(*this).name(), current_size, empty_buckets, overpopulated_buckets );
         reported = true;
     }
 #endif
-#endif//TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS
+#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS
     my_size = 0;
     segment_index_t s = segment_index_of( m );
     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], "wrong mask or concurrent grow" );
     cache_aligned_allocator<bucket> alloc;
     do {
         __TBB_ASSERT( is_valid( my_table[s] ), "wrong mask or concurrent grow" );
-        segment_ptr_t buckets = my_table[s];
+        segment_ptr_t buckets_ptr = my_table[s];
         size_type sz = segment_size( s ? s : 1 );
         for( segment_index_t i = 0; i < sz; i++ )
-            for( node_base *n = buckets[i].node_list; is_valid(n); n = buckets[i].node_list ) {
-                buckets[i].node_list = n->next;
+            for( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {
+                buckets_ptr[i].node_list = n->next;
                 delete_node( n );
             }
         if( s >= first_block) // the first segment or the next
-            alloc.deallocate( buckets, sz );
+            alloc.deallocate( buckets_ptr, sz );
         else if( s == embedded_block && embedded_block != first_block )
-            alloc.deallocate( buckets, segment_size(first_block)-embedded_buckets );
+            alloc.deallocate( buckets_ptr, segment_size(first_block)-embedded_buckets );
         if( s >= embedded_block ) my_table[s] = 0;
     } while(s-- > 0);
     my_mask = embedded_buckets - 1;
@@ -1203,19 +1320,21 @@ void concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( const concurrent_h
     hashcode_t mask = source.my_mask;
     if( my_mask == mask ) { // optimized version
         bucket *dst = 0, *src = 0;
+        bool rehash_required = false;
         for( hashcode_t k = 0; k <= mask; k++ ) {
             if( k & (k-2) ) ++dst,src++; // not the beginning of a segment
             else { dst = get_bucket( k ); src = source.get_bucket( k ); }
             __TBB_ASSERT( dst->node_list != internal::rehash_req, "Invalid bucket in destination table");
             node *n = static_cast<node*>( src->node_list );
             if( n == internal::rehash_req ) { // source is not rehashed, items are in previous buckets
-                bucket_accessor b( this, k );
-                rehash_bucket( b(), k ); // TODO: use without synchronization
+                rehash_required = true;
+                dst->node_list = internal::rehash_req;
             } else for(; n; n = static_cast<node*>( n->next ) ) {
                 add_to_bucket( dst, new( my_allocator ) node(n->item.first, n->item.second) );
                 ++my_size; // TODO: replace by non-atomic op
             }
         }
+        if( rehash_required ) rehash();
     } else internal_copy( source.begin(), source.end() );
 }
 
@@ -1233,6 +1352,12 @@ void concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {
     }
 }
 
+} // namespace interface4
+
+using interface4::tbb_hasher;
+using interface4::concurrent_hash_map;
+
+
 template<typename Key, typename T, typename HashCompare, typename A1, typename A2>
 inline bool operator==(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b) {
     if(a.size() != b.size()) return false;
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
index f344a84..9c06b23 100644
--- a/include/tbb/concurrent_queue.h
+++ b/include/tbb/concurrent_queue.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -50,7 +50,8 @@ class concurrent_queue: public internal::concurrent_queue_base_v3<T> {
     //! Allocates a block of size n (bytes)
     /*overide*/ virtual void *allocate_block( size_t n ) {
         void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
-        if( !b ) this->internal_throw_exception(); 
+        if( !b )
+            internal::throw_exception(internal::eid_bad_alloc); 
         return b;
     }
 
@@ -199,7 +200,8 @@ class concurrent_bounded_queue: public internal::concurrent_queue_base_v3 {
     /*overide*/ virtual page *allocate_page() {
         size_t n = sizeof(page) + items_per_page*item_size;
         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
-        if( !p ) internal_throw_exception(); 
+        if( !p )
+            internal::throw_exception(internal::eid_bad_alloc); 
         return p;
     }
 
diff --git a/include/tbb/concurrent_vector.h b/include/tbb/concurrent_vector.h
index 383c044..b2e8009 100644
--- a/include/tbb/concurrent_vector.h
+++ b/include/tbb/concurrent_vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,7 +33,7 @@
 #include <algorithm>
 #include <iterator>
 #include <new>
-#include <cstring>
+#include "tbb_exception.h"
 #include "atomic.h"
 #include "cache_aligned_allocator.h"
 #include "blocked_range.h"
@@ -61,12 +61,12 @@ namespace tbb {
 template<typename T, class A = cache_aligned_allocator<T> >
 class concurrent_vector;
 
-
 //! @cond INTERNAL
 namespace internal {
 
     //! Bad allocation marker
     static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));
+
     //! 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 );
 
@@ -166,6 +166,7 @@ namespace internal {
         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 );
+        //! Obsolete
         void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;
         void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
 
@@ -938,14 +939,14 @@ T& concurrent_vector<T, A>::internal_subscript( size_type index ) const {
 template<typename T, class A>
 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index ) const {
     if( index >= my_early_size )
-        internal_throw_exception(0); // throw std::out_of_range
+        internal::throw_exception(internal::eid_out_of_range); // throw std::out_of_range
     size_type j = index;
     segment_index_t k = segment_base_index_of( j );
     if( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
-        internal_throw_exception(1); // throw std::range_error
+        internal::throw_exception(internal::eid_segment_range_error); // throw std::range_error
     void *array = my_segment[k].array; // no need in __TBB_load_with_acquire
     if( array <= internal::vector_allocation_error_flag ) // check for correct segment pointer
-        internal_throw_exception(2); // throw std::range_error
+        internal::throw_exception(internal::eid_index_range_error); // throw std::range_error
     return static_cast<T*>(array)[j];
 }
 
diff --git a/include/tbb/critical_section.h b/include/tbb/critical_section.h
new file mode 100644
index 0000000..6926770
--- /dev/null
+++ b/include/tbb/critical_section.h
@@ -0,0 +1,141 @@
+/*
+    Copyright 2005-2010 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_CRITICAL_SECTION_H_
+#define _TBB_CRITICAL_SECTION_H_
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#else
+#include <pthread.h>
+#include <errno.h>
+#endif  // _WIN32||WIN64
+
+#include "tbb_stddef.h"
+#include "tbb_thread.h"
+#include "tbb_exception.h"
+
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+    namespace internal {
+class critical_section_v4 : internal::no_copy {
+#if _WIN32||_WIN64
+    CRITICAL_SECTION my_impl;
+#else
+    pthread_mutex_t my_impl;
+#endif
+    tbb_thread::id my_tid;
+public:
+
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    critical_section_v4() { 
+#if _WIN32||_WIN64
+        InitializeCriticalSection(&my_impl);
+#else
+        pthread_mutex_init(&my_impl, NULL);
+#endif
+        internal_construct();
+    }
+
+    ~critical_section_v4() {
+        __TBB_ASSERT(my_tid == tbb_thread::id(), "Destroying a still-held critical section");
+#if _WIN32||_WIN64
+        DeleteCriticalSection(&my_impl); 
+#else
+        pthread_mutex_destroy(&my_impl);
+#endif
+    }
+
+    class scoped_lock : internal::no_copy {
+    private:
+        critical_section_v4 &my_crit;
+    public:
+        scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {
+            my_crit.lock();
+        }
+
+        ~scoped_lock() {
+            my_crit.unlock();
+        }
+    };
+
+    void lock() { 
+        tbb_thread::id local_tid = this_tbb_thread::get_id();
+        if(local_tid == my_tid) throw_exception( eid_improper_lock );
+#if _WIN32||_WIN64
+        EnterCriticalSection( &my_impl );
+#else
+        int rval = pthread_mutex_lock(&my_impl);
+        __TBB_ASSERT_EX(!rval, "critical_section::lock: pthread_mutex_lock failed");
+#endif
+        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);
+        my_tid = local_tid;
+    }
+
+    bool try_lock() {
+        bool gotlock;
+        tbb_thread::id local_tid = this_tbb_thread::get_id();
+        if(local_tid == my_tid) return false;
+#if _WIN32||_WIN64
+        gotlock = TryEnterCriticalSection( &my_impl ) != 0;
+#else
+        int rval = pthread_mutex_trylock(&my_impl);
+        // valid returns are 0 (locked) and [EBUSY]
+        __TBB_ASSERT(rval == 0 || rval == EBUSY, "critical_section::trylock: pthread_mutex_trylock failed");
+        gotlock = rval == 0;
+#endif
+        if(gotlock)  {
+            my_tid = local_tid;
+        }
+        return gotlock;
+    }
+
+    void unlock() {
+        __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, "thread unlocking critical_section is not thread that locked it");
+        my_tid = tbb_thread::id();
+#if _WIN32||_WIN64
+        LeaveCriticalSection( &my_impl );
+#else
+        int rval = pthread_mutex_unlock(&my_impl);
+        __TBB_ASSERT_EX(!rval, "critical_section::unlock: pthread_mutex_unlock failed");
+#endif
+    }
+
+    static const bool is_rw_mutex = false;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = true;
+}; // critical_section_v4
+} // namespace internal
+typedef internal::critical_section_v4 critical_section;
+
+__TBB_DEFINE_PROFILING_SET_NAME(critical_section)
+} // namespace tbb
+#endif  // _TBB_CRITICAL_SECTION_H_
diff --git a/include/tbb/enumerable_thread_specific.h b/include/tbb/enumerable_thread_specific.h
index 123a62f..1119836 100644
--- a/include/tbb/enumerable_thread_specific.h
+++ b/include/tbb/enumerable_thread_specific.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/index.html b/include/tbb/index.html
index fa05965..7e4552e 100644
--- a/include/tbb/index.html
+++ b/include/tbb/index.html
@@ -17,7 +17,7 @@ Include files for Threading Building Blocks classes and functions.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/machine/ibm_aix51.h b/include/tbb/machine/ibm_aix51.h
index 4390115..ff3103b 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/include/tbb/machine/ibm_aix51.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 35bff25..4a48245 100644
--- a/include/tbb/machine/linux_common.h
+++ b/include/tbb/machine/linux_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
index 514e3d7..73a699e 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/linux_ia64.h b/include/tbb/machine/linux_ia64.h
index 59347b5..cd788fe 100644
--- a/include/tbb/machine/linux_ia64.h
+++ b/include/tbb/machine/linux_ia64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/linux_intel64.h b/include/tbb/machine/linux_intel64.h
index 55bca95..77a78ad 100644
--- a/include/tbb/machine/linux_intel64.h
+++ b/include/tbb/machine/linux_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 6d6b1be..2487d21 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/sunos_sparc.h b/include/tbb/machine/sunos_sparc.h
new file mode 100644
index 0000000..cf90a92
--- /dev/null
+++ b/include/tbb/machine/sunos_sparc.h
@@ -0,0 +1,233 @@
+/*
+    Copyright 2005-2010 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_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sched.h> // sched_yield
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 1
+
+#define __TBB_release_consistency_helper() __asm__ __volatile__ ("": : :"memory")
+
+inline void __TBB_rel_acq_fence() { __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad": : : "memory"); }
+
+//--------------------------------------------------
+// Compare and swap
+//--------------------------------------------------
+
+/**
+ * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr
+ * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand
+ * @param value value to assign *ptr to if *ptr==comparand
+ * @param comparand value to compare with *ptr
+ ( @return value originally in memory at ptr, regardless of success
+*/
+static inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand ){
+  int32_t result;
+  __asm__ __volatile__(
+                       "cas\t[%5],%4,%1"
+                       : "=m"(*(int32_t *)ptr), "=r"(result)
+                       : "m"(*(int32_t *)ptr), "1"(value), "r"(comparand), "r"(ptr)
+                       : "memory");
+  return result;
+}
+
+/**
+ * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr
+ * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand
+ * @param value value to assign *ptr to if *ptr==comparand
+ * @param comparand value to compare with *ptr
+ ( @return value originally in memory at ptr, regardless of success
+ */
+static inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand ){
+  int64_t result;
+  __asm__ __volatile__(
+                       "casx\t[%5],%4,%1"
+               : "=m"(*(int64_t *)ptr), "=r"(result)
+               : "m"(*(int64_t *)ptr), "1"(value), "r"(comparand), "r"(ptr)
+               : "memory");
+  return result;
+}
+
+//---------------------------------------------------
+// Fetch and add
+//---------------------------------------------------
+
+/**
+ * Atomic fetch and add for 32 bit values, in this case implemented by continuously checking success of atomicity
+ * @param ptr pointer to value to add addend to
+ * @param addened value to add to *ptr
+ * @return value at ptr before addened was added
+ */
+static inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend){
+  int32_t result;
+  __asm__ __volatile__ (                                 
+                        "0:\t add\t %3, %4, %0\n"    // do addition
+                        "\t cas\t [%2], %3, %0\n"        // cas to store result in memory
+                        "\t cmp\t %3, %0\n"            // check if value from memory is original
+                        "\t bne,a,pn\t %%icc, 0b\n"        // if not try again
+                        "\t mov %0, %3\n"            // use branch delay slot to move new value in memory to be added
+               : "=&r"(result), "=m"(*(int32_t *)ptr)
+               : "r"(ptr), "r"(*(int32_t *)ptr), "r"(addend), "m"(*(int32_t *)ptr)
+               : "ccr", "memory");
+  return result;
+}
+
+/**
+ * Atomic fetch and add for 64 bit values, in this case implemented by continuously checking success of atomicity
+ * @param ptr pointer to value to add addend to
+ * @param addened value to add to *ptr
+ * @return value at ptr before addened was added
+ */
+static inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend){
+  int64_t result;
+  __asm__ __volatile__ (
+                        "0:\t add\t %3, %4, %0\n"    // do addition
+                        "\t casx\t [%2], %3, %0\n"        // cas to store result in memory
+                        "\t cmp\t %3, %0\n"            // check if value from memory is original
+                        "\t bne,a,pn\t %%xcc, 0b\n"        // if not try again
+                        "\t mov %0, %3\n"            // use branch delay slot to move new value in memory to be added
+                : "=&r"(result), "=m"(*(int64_t *)ptr)
+                : "r"(ptr), "r"(*(int64_t *)ptr), "r"(addend), "m"(*(int64_t *)ptr)
+                : "ccr", "memory");
+  return result;
+}
+
+//--------------------------------------------------------
+// Logarithm (base two, integer)
+//--------------------------------------------------------
+
+static inline int64_t __TBB_machine_lg( uint64_t x ) {
+    uint64_t count;
+    // one hot encode
+    x |= (x >> 1);
+    x |= (x >> 2);
+    x |= (x >> 4);
+    x |= (x >> 8);
+    x |= (x >> 16);
+    x |= (x >> 32);
+    // count 1's
+    __asm__ ("popc %1, %0" : "=r"(count) : "r"(x) );
+    return count-1;
+}
+
+//--------------------------------------------------------
+
+static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
+  __asm__ __volatile__ (
+                        "0:\t or\t %2, %3, %%g1\n" // do addition
+                        "\t casx\t [%1], %2, %%g1\n"            // cas to store result in memory
+                        "\t cmp\t %2, %%g1\n"                   // check if value from memory is original
+                        "\t bne,a,pn\t %%xcc, 0b\n" // if not try again
+                        "\t mov %%g1, %2\n"                     // use branch delay slot to move new value in memory to be added
+                : "=m"(*(int64_t *)ptr)
+                : "r"(ptr), "r"(*(int64_t *)ptr), "r"(addend), "m"(*(int64_t *)ptr)
+                : "ccr", "g1", "memory");
+}
+
+static inline void __TBB_machine_and( volatile void *ptr, uint64_t addend ) {
+  __asm__ __volatile__ (
+                        "0:\t and\t %2, %3, %%g1\n"        // do addition
+                        "\t casx\t [%1], %2, %%g1\n"            // cas to store result in memory
+                        "\t cmp\t %2, %%g1\n"                   // check if value from memory is original
+                        "\t bne,a,pn\t %%xcc, 0b\n"         // if not try again
+                        "\t mov %%g1, %2\n"                     // use branch delay slot to move new value in memory to be added
+                : "=m"(*(int64_t *)ptr)
+                : "r"(ptr), "r"(*(int64_t *)ptr), "r"(addend), "m"(*(int64_t *)ptr)
+                : "ccr", "g1", "memory");
+}
+
+
+static inline void __TBB_machine_pause( int32_t delay ) {
+    // do nothing, inlined, doesnt matter
+}
+
+// put 0xff in memory location, return memory value,
+//  generic trylockbyte puts 0x01, however this is fine
+//  because all that matters is that 0 is unlocked
+static inline bool __TBB_machine_trylockbyte(unsigned char &flag){
+    unsigned char result;
+    __asm__ __volatile__ (
+            "ldstub\t [%2], %0\n"
+        : "=r"(result), "=m"(flag)
+        : "r"(&flag), "m"(flag)
+        : "memory");
+    return result == 0;
+}
+
+
+// Machine specific atomic operations
+
+//#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)  // use generic version in tbb_machine.h
+//#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)  // use generic version in tbb_machine.h
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+
+//#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)       // use generic version in tbb_machine.h
+//#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)       // use generic version in tbb_machine.h
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V)  __TBB_machine_fetchadd8(P,V)
+#define __TBB_FetchAndAddW(P,V)  __TBB_machine_fetchadd8(P,V)
+
+// use generic version in tbb_machine.h
+//#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) __TBB_machine_fetchstore4(P,V)
+//#define __TBB_FetchAndStore8(P,V)  __TBB_machine_fetchstore8(P,V)
+//#define __TBB_FetchAndStoreW(P,V)  __TBB_machine_fetchstore8(P,V)
+
+#define __TBB_Store8(P,V) (*P = V)
+#define __TBB_Load8(P)    (*P)
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
+#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
+
+// Definition of other functions
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)    __TBB_machine_lg(V)
+
+// Special atomic functions
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAddW(P,V)
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,-1)
+
+// Definition of Lock functions
+// Repeatedly runs TryLockByte, no need to implement
+#undef __TBB_LockByte
+
+#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
+
+#define __TBB_Yield() sched_yield()
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index 69c961a..dcf7b19 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/windows_intel64.h b/include/tbb/machine/windows_intel64.h
index a885aa4..8f9b746 100644
--- a/include/tbb/machine/windows_intel64.h
+++ b/include/tbb/machine/windows_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 a14735f..32a61f6 100644
--- a/include/tbb/mutex.h
+++ b/include/tbb/mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/null_mutex.h b/include/tbb/null_mutex.h
index 6cf8dc8..67aabd5 100644
--- a/include/tbb/null_mutex.h
+++ b/include/tbb/null_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/null_rw_mutex.h b/include/tbb/null_rw_mutex.h
index 6be42e1..2462389 100644
--- a/include/tbb/null_rw_mutex.h
+++ b/include/tbb/null_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_do.h b/include/tbb/parallel_do.h
index 922c968..c6fe53a 100644
--- a/include/tbb/parallel_do.h
+++ b/include/tbb/parallel_do.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_for.h b/include/tbb/parallel_for.h
index 8d103e0..5405262 100644
--- a/include/tbb/parallel_for.h
+++ b/include/tbb/parallel_for.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,8 +33,7 @@
 #include "partitioner.h"
 #include "blocked_range.h"
 #include <new>
-#include <stdexcept> // std::invalid_argument
-#include <string> // std::invalid_argument text
+#include "tbb_exception.h"
 
 namespace tbb {
 
@@ -209,9 +208,9 @@ void parallel_for(Index first, Index last, Index step, const Function& f) {
 }
 template <typename Index, typename Function>
 void parallel_for(Index first, Index last, Index step, const Function& f, tbb::task_group_context &context) {
-    if (step <= 0 ) throw std::invalid_argument("step should be positive");
-
-    if (last > first) {
+    if (step <= 0 )
+        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument
+    else if (last > first) {
         Index end = (last - first) / step;
         if (first + end * step < last) end++;
         tbb::blocked_range<Index> range(static_cast<Index>(0), end);
diff --git a/include/tbb/parallel_for_each.h b/include/tbb/parallel_for_each.h
index fa67b6c..57b63e0 100644
--- a/include/tbb/parallel_for_each.h
+++ b/include/tbb/parallel_for_each.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,9 +38,9 @@ namespace internal {
     // The class calls user function in operator()
     template <typename Function, typename Iterator>
     class parallel_for_each_body : internal::no_assign {
-        Function &my_func;
+        const Function &my_func;
     public:
-        parallel_for_each_body(Function &_func) : my_func(_func) {}
+        parallel_for_each_body(const Function &_func) : my_func(_func) {}
         parallel_for_each_body(const parallel_for_each_body<Function, Iterator> &_caller) : my_func(_caller.my_func) {}
 
         void operator() ( typename std::iterator_traits<Iterator>::value_type value ) const {
@@ -56,20 +56,18 @@ namespace internal {
 //! Calls function f for all items from [first, last) interval using user-supplied context
 /** @ingroup algorithms */
 template<typename InputIterator, typename Function>
-Function parallel_for_each(InputIterator first, InputIterator last, Function f, task_group_context &context) {
+void parallel_for_each(InputIterator first, InputIterator last, const Function& f, task_group_context &context) {
     internal::parallel_for_each_body<Function, InputIterator> body(f);
 
     tbb::parallel_do (first, last, body, context);
-    return f;
 }
 
 //! Uses default context
 template<typename InputIterator, typename Function>
-Function parallel_for_each(InputIterator first, InputIterator last, Function f) {
+void parallel_for_each(InputIterator first, InputIterator last, const Function& f) {
     internal::parallel_for_each_body<Function, InputIterator> body(f);
 
     tbb::parallel_do (first, last, body);
-    return f;
 }
 
 //@}
diff --git a/include/tbb/parallel_invoke.h b/include/tbb/parallel_invoke.h
index fb425c6..02c3e80 100644
--- a/include/tbb/parallel_invoke.h
+++ b/include/tbb/parallel_invoke.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,9 +39,9 @@ namespace internal {
     template<typename function>
     class function_invoker : public task{
     public:
-        function_invoker(function& _function) : my_function(_function) {}
+        function_invoker(const function& _function) : my_function(_function) {}
     private:
-        function &my_function;
+        const function &my_function;
         /*override*/
         task* execute()
         {
@@ -54,9 +54,9 @@ namespace internal {
     template <size_t N, typename function1, typename function2, typename function3>
     class spawner : public task {
     private:
-        function1& my_func1;
-        function2& my_func2;
-        function3& my_func3;
+        const function1& my_func1;
+        const function2& my_func2;
+        const function3& my_func3;
         bool is_recycled;
 
         task* execute (){
@@ -82,7 +82,7 @@ namespace internal {
         } // execute
 
     public:
-        spawner(function1& _func1, function2& _func2, function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
+        spawner(const function1& _func1, const function2& _func2, const function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
     };
 
     // Creates and spawns child tasks
@@ -100,7 +100,7 @@ namespace internal {
         }
         // Adds child task and spawns it
         template <typename function>
-        void add_child (function &_func)
+        void add_child (const function &_func)
         {
             internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(_func);
             __TBB_ASSERT(invoker, "Child task allocation failed");
@@ -110,7 +110,7 @@ namespace internal {
         // Adds a task with multiple child tasks and spawns it
         // two arguments
         template <typename function1, typename function2>
-        void add_children (function1& _func1, function2& _func2)
+        void add_children (const function1& _func1, const function2& _func2)
         {
             // The third argument is dummy, it is ignored actually.
             parallel_invoke_noop noop;
@@ -119,7 +119,7 @@ namespace internal {
         }
         // three arguments
         template <typename function1, typename function2, typename function3>
-        void add_children (function1& _func1, function2& _func2, function3& _func3)
+        void add_children (const function1& _func1, const function2& _func2, const function3& _func3)
         {
             internal::spawner<3, function1, function2, function3>& sub_root = *new(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);
             spawn(sub_root);
@@ -127,7 +127,7 @@ namespace internal {
 
         // Waits for all child tasks
         template <typename F0>
-        void run_and_finish(F0& f0)
+        void run_and_finish(const F0& f0)
         {
             internal::function_invoker<F0>* invoker = new (allocate_child()) internal::function_invoker<F0>(f0);
             __TBB_ASSERT(invoker, "Child task allocation failed");
@@ -156,7 +156,7 @@ namespace internal {
 // parallel_invoke with user-defined context
 // two arguments
 template<typename F0, typename F1 >
-void parallel_invoke(F0 f0, F1 f1, tbb::task_group_context& context) {
+void parallel_invoke(const F0& f0, const F1& f1, tbb::task_group_context& context) {
     internal::parallel_invoke_cleaner cleaner(2, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -167,7 +167,7 @@ void parallel_invoke(F0 f0, F1 f1, tbb::task_group_context& context) {
 
 // three arguments
 template<typename F0, typename F1, typename F2 >
-void parallel_invoke(F0 f0, F1 f1, F2 f2, tbb::task_group_context& context) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, tbb::task_group_context& context) {
     internal::parallel_invoke_cleaner cleaner(3, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -179,7 +179,9 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, tbb::task_group_context& context) {
 
 // four arguments
 template<typename F0, typename F1, typename F2, typename F3>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context& context) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(4, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -192,7 +194,9 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context& contex
 
 // five arguments
 template<typename F0, typename F1, typename F2, typename F3, typename F4 >
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context& context) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(3, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -203,8 +207,10 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context&
 }
 
 // six arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5 >
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context& context) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(3, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -215,8 +221,11 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_c
 }
 
 // seven arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6 >
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context& context) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(3, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -227,9 +236,12 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_
 }
 
 // eight arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-    typename F7>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context& context) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4,
+         typename F5, typename F6, typename F7>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(4, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -241,9 +253,12 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb
 }
 
 // nine arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-        typename F7, typename F8>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context& context) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4,
+         typename F5, typename F6, typename F7, typename F8>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7, const F8& f8,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(4, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -255,9 +270,12 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8
 }
 
 // ten arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-        typename F7, typename F8, typename F9>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context& context) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4,
+         typename F5, typename F6, typename F7, typename F8, typename F9>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9,
+                     tbb::task_group_context& context)
+{
     internal::parallel_invoke_cleaner cleaner(4, context);
     internal::parallel_invoke_helper& root = cleaner.root;
 
@@ -270,58 +288,66 @@ void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8
 
 // two arguments
 template<typename F0, typename F1>
-void parallel_invoke(F0 f0, F1 f1) {
+void parallel_invoke(const F0& f0, const F1& f1) {
     task_group_context context;
     parallel_invoke<F0, F1>(f0, f1, context);
 }
 // three arguments
 template<typename F0, typename F1, typename F2>
-void parallel_invoke(F0 f0, F1 f1, F2 f2) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2) {
     task_group_context context;
     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
 }
 // four arguments
 template<typename F0, typename F1, typename F2, typename F3 >
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3) {
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
 }
 // five arguments
 template<typename F0, typename F1, typename F2, typename F3, typename F4>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4) {
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
 }
 // six arguments
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5) {
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
 }
 // seven arguments
 template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6) {
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6)
+{
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
 }
 // eigth arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-        typename F7>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4, 
+         typename F5, typename F6, typename F7>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7)
+{
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
 }
 // nine arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-        typename F7, typename F8>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4,
+         typename F5, typename F6, typename F7, typename F8>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7, const F8& f8)
+{
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
 }
 // ten arguments
-template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
-        typename F7, typename F8, typename F9>
-void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9) {
+template<typename F0, typename F1, typename F2, typename F3, typename F4,
+         typename F5, typename F6, typename F7, typename F8, typename F9>
+void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,
+                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9)
+{
     task_group_context context;
     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
 }
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
index 0300173..4dcd060 100644
--- a/include/tbb/parallel_reduce.h
+++ b/include/tbb/parallel_reduce.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -65,7 +65,7 @@ namespace internal {
     /** Represented as a char, not enum, for compactness. */
     typedef char reduction_context;
 
-    //! Task type use to combine the partial results of parallel_reduce with affinity_partitioner.
+    //! Task type use to combine the partial results of parallel_reduce.
     /** @ingroup algorithms */
     template<typename Body>
     class finish_reduce: public task {
@@ -95,7 +95,7 @@ namespace internal {
         friend class start_reduce;
     };
 
-    //! Task type used to split the work of parallel_reduce with affinity_partitioner.
+    //! Task type used to split the work of parallel_reduce.
     /** @ingroup algorithms */
     template<typename Range, typename Body, typename Partitioner>
     class start_reduce: public task {
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
index 1369bf7..5775db8 100644
--- a/include/tbb/parallel_scan.h
+++ b/include/tbb/parallel_scan.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 38b380d..6fbbe80 100644
--- a/include/tbb/parallel_sort.h
+++ b/include/tbb/parallel_sort.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_while.h b/include/tbb/parallel_while.h
index a4ad9e6..378b55f 100644
--- a/include/tbb/parallel_while.h
+++ b/include/tbb/parallel_while.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 53e2953..64ee5db 100644
--- a/include/tbb/partitioner.h
+++ b/include/tbb/partitioner.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 4cfb293..ed99277 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
index a7cb71c..f971141 100644
--- a/include/tbb/queuing_mutex.h
+++ b/include/tbb/queuing_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
index 27456f6..a684d96 100644
--- a/include/tbb/queuing_rw_mutex.h
+++ b/include/tbb/queuing_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/recursive_mutex.h b/include/tbb/recursive_mutex.h
index 1b7a825..6003d63 100644
--- a/include/tbb/recursive_mutex.h
+++ b/include/tbb/recursive_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/scalable_allocator.h b/include/tbb/scalable_allocator.h
index aca27a7..2293803 100644
--- a/include/tbb/scalable_allocator.h
+++ b/include/tbb/scalable_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -151,7 +151,7 @@ public:
         size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);
         return (absolutemax > 0 ? absolutemax : 1);
     }
-    void construct( pointer p, const value_type& val ) { new(static_cast<void*>(p)) value_type(val); }
+    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
     void destroy( pointer p ) {p->~value_type();}
 };
 
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
index 446821a..8f6dc62 100644
--- a/include/tbb/spin_mutex.h
+++ b/include/tbb/spin_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/spin_rw_mutex.h b/include/tbb/spin_rw_mutex.h
index 229745b..fd760d4 100644
--- a/include/tbb/spin_rw_mutex.h
+++ b/include/tbb/spin_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/task.h b/include/tbb/task.h
index 05a6898..57f5d81 100644
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -170,9 +170,10 @@ namespace internal {
 
         //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.
         /** 0x0 -> version 1.0 task
-            0x1 -> version 3.0 task
-            0x2 -> task_proxy
-            0x40 -> task has live ref_count */
+            0x1 -> version >=2.1 task
+            0x20 -> task_proxy
+            0x40 -> task has live ref_count
+            0x80 -> a stolen task */
         unsigned char extra_state;
 
         affinity_id affinity;
@@ -603,9 +604,7 @@ public:
 
     //! True if task is owned by different thread than thread that owns its parent.
     bool is_stolen_task() const {
-        internal::task_prefix& p = prefix();
-        internal::task_prefix& q = parent()->prefix();
-        return p.owner!=q.owner;
+        return (prefix().extra_state & 0x80)!=0;
     }
 
     //------------------------------------------------------------------------
diff --git a/include/tbb/task_group.h b/include/tbb/task_group.h
index b3e6cf2..f2ab562 100644
--- a/include/tbb/task_group.h
+++ b/include/tbb/task_group.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,18 +30,36 @@
 #define __TBB_task_group_H
 
 #include "task.h"
-#include <exception>
+#include "tbb_exception.h"
 
 namespace tbb {
 
+namespace internal {
+    template<typename F> class task_handle_task;
+}
+
 template<typename F>
 class task_handle {
+    template<typename _F> friend class internal::task_handle_task;
+
+    static const intptr_t scheduled = 0x1;
+
     F my_func;
+    intptr_t my_state;
+
+    void mark_scheduled () {
+        // The check here is intentionally lax to avoid the impact of interlocked operation
+        if ( my_state & scheduled )
+            internal::throw_exception( internal::eid_invalid_multiple_scheduling );
+        my_state |= scheduled;
+    }
 
+    // No assignment operator
+    const task_handle& operator = ( const task_handle& );
 public:
-    task_handle( const F& f ) : my_func(f) {}
+    task_handle( const F& f ) : my_func(f), my_state(0) {}
 
-    void operator()() { my_func(); }
+    void operator() () const { my_func(); }
 };
 
 enum task_group_status {
@@ -74,7 +92,7 @@ class task_handle_task : public task {
         return NULL;
     }
 public:
-    task_handle_task( task_handle<F>& h ) : my_handle(h) {}
+    task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
 };
 
 class task_group_base : internal::no_copy {
@@ -178,12 +196,6 @@ public:
     }
 }; // class task_group
 
-class missing_wait : public std::exception {
-public:
-    /*override*/ 
-    const char* what() const throw() { return "wait() was not called on the structured_task_group"; }
-};
-
 class structured_task_group : public internal::task_group_base {
 public:
     ~structured_task_group() {
@@ -196,10 +208,13 @@ public:
             my_root->wait_for_all();
             owner().destroy(*my_root);
             if ( !stack_unwinding_in_progress )
-                throw missing_wait();
+                internal::throw_exception( internal::eid_missing_wait );
         }
-        else
+        else {
+            if( my_root->ref_count() == 1 )
+                my_root->set_ref_count(0);
             owner().destroy(*my_root);
+        }
     }
 
     template<typename F>
@@ -208,8 +223,9 @@ public:
     }
 
     task_group_status wait() {
-        __TBB_ASSERT ( my_root->ref_count() != 0, "wait() can be called only once during the structured_task_group lifetime" );
-        return task_group_base::wait();
+        task_group_status res = task_group_base::wait();
+        my_root->set_ref_count(1);
+        return res;
     }
 }; // class structured_task_group
 
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
index f817ccc..458afb2 100644
--- a/include/tbb/task_scheduler_init.h
+++ b/include/tbb/task_scheduler_init.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/task_scheduler_observer.h b/include/tbb/task_scheduler_observer.h
index ee8bd5d..9df4d73 100644
--- a/include/tbb/task_scheduler_observer.h
+++ b/include/tbb/task_scheduler_observer.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tbb.h b/include/tbb/tbb.h
index 4bac7bf..a09817e 100644
--- a/include/tbb/tbb.h
+++ b/include/tbb/tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,6 +46,7 @@
 #include "concurrent_hash_map.h"
 #include "concurrent_queue.h"
 #include "concurrent_vector.h"
+#include "critical_section.h"
 #include "enumerable_thread_specific.h"
 #include "mutex.h"
 #include "null_mutex.h"
diff --git a/include/tbb/tbb_allocator.h b/include/tbb/tbb_allocator.h
index aa1544b..4f01990 100644
--- a/include/tbb/tbb_allocator.h
+++ b/include/tbb/tbb_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -107,7 +107,7 @@ public:
     }
     
     //! Copy-construct value at location pointed to by p.
-    void construct( pointer p, const value_type& value ) {new(static_cast<void*>(p)) value_type(value);}
+    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
 
     //! Destroy value at location pointed to by p.
     void destroy( pointer p ) {p->~value_type();}
diff --git a/include/tbb/tbb_config.h b/include/tbb/tbb_config.h
index fad5bf2..f907096 100644
--- a/include/tbb/tbb_config.h
+++ b/include/tbb/tbb_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index 621129e..059c567 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,23 +30,72 @@
 #define __TBB_exception_H
 
 #include "tbb_stddef.h"
-#include <stdexcept>
 
 #if __TBB_EXCEPTIONS && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)
 #error The current compilation environment does not support exception handling. Please set __TBB_EXCEPTIONS to 0 in tbb_config.h
 #endif
 
+#include <stdexcept>
+#if __SUNPRO_CC
+#include <string> // required to construct std exception classes
+#endif
+
 namespace tbb {
 
 //! Exception for concurrent containers
 class bad_last_alloc : public std::bad_alloc {
 public:
-    virtual const char* what() const throw() { return "bad allocation in previous or concurrent attempt"; }
-    virtual ~bad_last_alloc() throw() {}
+    /*override*/ const char* what() const throw();
+    /** Necessary to avoid ICL error: "exception specification for implicitly 
+        declared virtual is incompatible with that of overridden function". **/
+    /*override*/ ~bad_last_alloc() throw() {}
+};
+
+//! Exception for PPL locks
+class improper_lock : public std::exception {
+public:
+    /*override*/ const char* what() const throw();
+};
+
+//! Exception for missing wait on structured_task_group
+class missing_wait : public std::exception {
+public:
+    /*override*/ const char* what() const throw();
+};
+
+//! Exception for repeated scheduling of the same task_handle 
+class invalid_multiple_scheduling : public std::exception {
+public:
+    /*override*/ const char* what() const throw();
 };
 
 namespace internal {
-void __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4() ;
+//! Obsolete
+void __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();
+
+enum exception_id {
+    eid_bad_alloc = 1,
+    eid_bad_last_alloc,
+    eid_nonpositive_step,
+    eid_out_of_range,
+    eid_segment_range_error,
+    eid_index_range_error,
+    eid_missing_wait,
+    eid_invalid_multiple_scheduling,
+    eid_improper_lock,
+    //! The last enumerator tracks the number of defined IDs. It must remain the last one.
+    /** When adding new IDs, place them immediately _before_ this comment (that is
+        _after_ all the existing IDs. Never insert new IDs between the existing ones. **/
+    eid_max
+};
+
+//! Gathers all throw operators in one place.
+/** Its purpose is to minimize code bloat that can be caused by throw operators 
+    scattered in multiple places, especially in templates. **/
+void __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
+
+//! Versionless covenience wrapper for throw_exception_v4()
+inline void throw_exception ( exception_id eid ) { throw_exception_v4(eid); }
 } // namespace internal
 
 } // namespace tbb
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index 0673f24..8c01a45 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -85,6 +85,8 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #include "machine/linux_ia32.h"
 #elif __x86_64__
 #include "machine/linux_intel64.h"
+#elif __sparc
+#include "machine/sunos_sparc.h"
 #endif
 
 #endif
diff --git a/include/tbb/tbb_profiling.h b/include/tbb/tbb_profiling.h
index f9c686d..dc964c5 100644
--- a/include/tbb/tbb_profiling.h
+++ b/include/tbb/tbb_profiling.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index a1e24df..f3f9f0f 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,7 +34,7 @@
 #define TBB_VERSION_MINOR 2
 
 // Engineering-focused interface version
-#define TBB_INTERFACE_VERSION 4001
+#define TBB_INTERFACE_VERSION 4003
 #define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
 
 // The oldest major interface version still supported
diff --git a/include/tbb/tbb_thread.h b/include/tbb/tbb_thread.h
index 6b40a9c..1e12fd2 100644
--- a/include/tbb/tbb_thread.h
+++ b/include/tbb/tbb_thread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -161,6 +161,7 @@ namespace internal {
 #endif // _WIN32||_WIN64
             return *this;
         }
+        void swap( tbb_thread_v3& t ) {tbb::swap( *this, t );}
         bool joinable() const {return my_handle!=0; }
         //! The completion of the thread represented by *this happens before join() returns.
         void __TBB_EXPORTED_METHOD join();
diff --git a/include/tbb/tbbmalloc_proxy.h b/include/tbb/tbbmalloc_proxy.h
index ebde358..f15ca12 100644
--- a/include/tbb/tbbmalloc_proxy.h
+++ b/include/tbb/tbbmalloc_proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tick_count.h b/include/tbb/tick_count.h
index 4956182..a3d25d5 100644
--- a/include/tbb/tick_count.h
+++ b/include/tbb/tick_count.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/index.html b/index.html
index d35f392..a126891 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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 c4ff8da..41cc16d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -37,7 +37,7 @@ tbbmalloc: tbbmalloc_release tbbmalloc_debug
 
 rml: rml_release rml_debug
 
-test: tbbmalloc_test_release test_release tbbmalloc_test_debug test_debug
+test: tbbmalloc_test_release rml_test_release test_release tbbmalloc_test_debug rml_test_debug test_debug
 
 # Suffix _ni stands for "no ingnore", meaning that the first error during the test session will stop it
 test_ni: tbbmalloc_test_release_ni test_release_ni tbbmalloc_test_debug_ni test_debug_ni
diff --git a/src/index.html b/src/index.html
index 5e53ce7..cc7c58a 100644
--- a/src/index.html
+++ b/src/index.html
@@ -21,7 +21,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-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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 a6d0d6f..d528e12 100644
--- a/src/old/concurrent_queue_v2.cpp
+++ b/src/old/concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -127,10 +127,10 @@ public:
     }
 
     atomic<ticket> head_counter;
-    char pad1[NFS_MaxLineSize-sizeof(size_t)];
+    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];
 
     atomic<ticket> tail_counter;
-    char pad2[NFS_MaxLineSize-sizeof(ticket)];
+    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];
     micro_queue array[n_queue];    
 
     micro_queue& choose( ticket k ) {
diff --git a/src/old/concurrent_queue_v2.h b/src/old/concurrent_queue_v2.h
index 862384e..23344ab 100644
--- a/src/old/concurrent_queue_v2.h
+++ b/src/old/concurrent_queue_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/concurrent_vector_v2.cpp b/src/old/concurrent_vector_v2.cpp
index 36186ea..8c0a417 100644
--- a/src/old/concurrent_vector_v2.cpp
+++ b/src/old/concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/concurrent_vector_v2.h b/src/old/concurrent_vector_v2.h
index a9c3a3b..3cb494c 100644
--- a/src/old/concurrent_vector_v2.h
+++ b/src/old/concurrent_vector_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/spin_rw_mutex_v2.cpp b/src/old/spin_rw_mutex_v2.cpp
index 9067b09..b2e2b3c 100644
--- a/src/old/spin_rw_mutex_v2.cpp
+++ b/src/old/spin_rw_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/spin_rw_mutex_v2.h b/src/old/spin_rw_mutex_v2.h
index 3285e8e..47930f5 100644
--- a/src/old/spin_rw_mutex_v2.h
+++ b/src/old/spin_rw_mutex_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/old/test_concurrent_queue_v2.cpp b/src/old/test_concurrent_queue_v2.cpp
index 4443b59..c5ed6ec 100644
--- a/src/old/test_concurrent_queue_v2.cpp
+++ b/src/old/test_concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -334,11 +334,7 @@ void TestNegativeQueue( int nthread ) {
     NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
 }
 
-int main( int argc, char* argv[] ) {
-    // Set default for minimum number of threads.
-    MinThread = 1;
-    ParseCommandLine(argc,argv);
-
+int TestMain () {
     TestEmptyQueue<char>();
     TestEmptyQueue<Foo>();
     TestFullQueue();
@@ -356,6 +352,5 @@ int main( int argc, char* argv[] ) {
             TestPushPop(prefill,ptrdiff_t(100),nthread);
         }
     }
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/old/test_concurrent_vector_v2.cpp b/src/old/test_concurrent_vector_v2.cpp
index 68a7311..62fa5f1 100644
--- a/src/old/test_concurrent_vector_v2.cpp
+++ b/src/old/test_concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -542,11 +542,7 @@ void TestSort() {
 
 //------------------------------------------------------------------------
 
-//! Test driver
-int main( int argc, char* argv[] ) {
-    // Test requires at least one thread.
-    MinThread = 1;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<1 ) {
         std::printf("ERROR: MinThread=%d, but must be at least 1\n",MinThread);
     }
@@ -565,6 +561,5 @@ int main( int argc, char* argv[] ) {
     }
     TestFindPrimes();
     TestSort();
-    std::printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/old/test_mutex_v2.cpp b/src/old/test_mutex_v2.cpp
index 4e2a1ef..0c3f699 100644
--- a/src/old/test_mutex_v2.cpp
+++ b/src/old/test_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -249,22 +249,20 @@ void TestTryAcquire_OneThread( const char * mutex_name ) {
 
 #include "tbb/task_scheduler_init.h"
 
-int main( int argc, char * argv[] ) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     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 ) {
-	    Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+        if( Verbose )
+            printf( "testing with %d workers\n", static_cast<int>(p) );
+        // Run each test 3 times.
+        for( int i=0; i<3; ++i ) {
+            Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
             
             TestTryAcquire_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); // only tests try_acquire for writers
-	    TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
-	if( Verbose )
-	    printf( "calling destructor for task_scheduler_init\n" );
-	}
+            TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+        }
+        if( Verbose )
+            printf( "calling destructor for task_scheduler_init\n" );
     }
-    STD::printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/perf/fibonacci_cutoff.cpp b/src/perf/fibonacci_cutoff.cpp
index 2f2f710..f1f50ef 100644
--- a/src/perf/fibonacci_cutoff.cpp
+++ b/src/perf/fibonacci_cutoff.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/fibonacci_impl_tbb.cpp b/src/perf/fibonacci_impl_tbb.cpp
index 66c6f24..83d7e49 100644
--- a/src/perf/fibonacci_impl_tbb.cpp
+++ b/src/perf/fibonacci_impl_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -78,7 +78,7 @@ struct FibTask: public tbb::task {
 };
 
 long ParallelFib( const long n ) {
-    long sum;
+    long sum = 0;
     FibTask& a = *new(tbb::task::allocate_root()) FibTask(n,&sum);
     tbb::task::spawn_root_and_wait(a);
     return sum;
diff --git a/src/perf/perf_util.h b/src/perf/perf_util.h
index 812f5d6..badbef4 100644
--- a/src/perf/perf_util.h
+++ b/src/perf/perf_util.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/statistics.cpp b/src/perf/statistics.cpp
index 5edebb8..afe22cd 100644
--- a/src/perf/statistics.cpp
+++ b/src/perf/statistics.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 3066190..04412fd 100644
--- a/src/perf/statistics.h
+++ b/src/perf/statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 7521825..7be259e 100644
--- a/src/perf/statistics_xml.h
+++ b/src/perf/statistics_xml.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 78cbef2..70bdeae 100644
--- a/src/perf/time_base.cpp
+++ b/src/perf/time_base.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 d301c2b..89abc2d 100644
--- a/src/perf/time_framework.h
+++ b/src/perf/time_framework.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 a72cf48..800a803 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_hash_map_fill.cpp b/src/perf/time_hash_map_fill.cpp
index 1b96447..53e2115 100644
--- a/src/perf/time_hash_map_fill.cpp
+++ b/src/perf/time_hash_map_fill.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_locked_work.cpp b/src/perf/time_locked_work.cpp
index 62b9f38..13a9391 100644
--- a/src/perf/time_locked_work.cpp
+++ b/src/perf/time_locked_work.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_sandbox.h b/src/perf/time_sandbox.h
index 158ebe7..f3bb23b 100644
--- a/src/perf/time_sandbox.h
+++ b/src/perf/time_sandbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 8d8162d..7facf1c 100644
--- a/src/perf/time_unit.cpp
+++ b/src/perf/time_unit.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 f2d8672..1f9d6cc 100644
--- a/src/perf/time_vector.cpp
+++ b/src/perf/time_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/index.html b/src/rml/client/index.html
index 5c7bd50..e92185c 100644
--- a/src/rml/client/index.html
+++ b/src/rml/client/index.html
@@ -31,7 +31,7 @@ This directory has source code that must be statically linked into an RML client
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/rml/client/library_assert.h b/src/rml/client/library_assert.h
index 6d8300b..f198fa5 100644
--- a/src/rml/client/library_assert.h
+++ b/src/rml/client/library_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/omp_dynamic_link.cpp b/src/rml/client/omp_dynamic_link.cpp
index 0f89a3c..c40e941 100644
--- a/src/rml/client/omp_dynamic_link.cpp
+++ b/src/rml/client/omp_dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/omp_dynamic_link.h b/src/rml/client/omp_dynamic_link.h
index 290b668..02f306c 100644
--- a/src/rml/client/omp_dynamic_link.h
+++ b/src/rml/client/omp_dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/rml_factory.h b/src/rml/client/rml_factory.h
index 2f584b9..1bcec18 100644
--- a/src/rml/client/rml_factory.h
+++ b/src/rml/client/rml_factory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,6 +53,19 @@
 
 const ::rml::versioned_object::version_type CLIENT_VERSION = 1;
 
+#if __TBB_WEAK_SYMBOLS
+    #pragma weak __RML_open_factory
+    #pragma weak __TBB_make_rml_server
+    #pragma weak __RML_close_factory
+    #pragma weak __TBB_call_with_my_server_info
+    extern "C" {
+        ::rml::factory::status_type __RML_open_factory ( ::rml::factory&, ::rml::versioned_object::version_type&, ::rml::versioned_object::version_type );
+        ::rml::factory::status_type __TBB_make_rml_server( tbb::internal::rml::tbb_factory& f, tbb::internal::rml::tbb_server*& server, tbb::internal::rml::tbb_client& client );
+        void __TBB_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg );
+        void __RML_close_factory( ::rml::factory& f );
+    }
+#endif /* __TBB_WEAK_SYMBOLS */
+
 ::rml::factory::status_type FACTORY::open() {
     // Failure of following assertion indicates that factory is already open, or not zero-inited.
     LIBRARY_ASSERT( !library_handle, NULL );
diff --git a/src/rml/client/rml_omp.cpp b/src/rml/client/rml_omp.cpp
index 38a5a5f..336fd9c 100644
--- a/src/rml/client/rml_omp.cpp
+++ b/src/rml/client/rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/rml_tbb.cpp b/src/rml/client/rml_tbb.cpp
index 7e1612e..d627737 100644
--- a/src/rml/client/rml_tbb.cpp
+++ b/src/rml/client/rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/include/index.html b/src/rml/include/index.html
index aacad33..6a47794 100644
--- a/src/rml/include/index.html
+++ b/src/rml/include/index.html
@@ -18,7 +18,7 @@ This directory has the include files for the Resource Management Layer (RML).
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/rml/include/rml_base.h b/src/rml/include/rml_base.h
index 148edb2..85ab556 100644
--- a/src/rml/include/rml_base.h
+++ b/src/rml/include/rml_base.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/include/rml_omp.h b/src/rml/include/rml_omp.h
index d664908..e9e3972 100644
--- a/src/rml/include/rml_omp.h
+++ b/src/rml/include/rml_omp.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/include/rml_tbb.h b/src/rml/include/rml_tbb.h
index 3c0d8a9..42f1719 100644
--- a/src/rml/include/rml_tbb.h
+++ b/src/rml/include/rml_tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/index.html b/src/rml/index.html
index 9c403af..1582714 100644
--- a/src/rml/index.html
+++ b/src/rml/index.html
@@ -20,7 +20,7 @@ The subdirectories pertain to the Resource Management Layer (RML).
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/rml/perfor/omp_nested.cpp b/src/rml/perfor/omp_nested.cpp
index b63358c..d72801b 100644
--- a/src/rml/perfor/omp_nested.cpp
+++ b/src/rml/perfor/omp_nested.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,24 +32,31 @@
 #include <float.h>
 #include <math.h>
 #include <time.h>
-#include <unistd.h>
-#include <pthread.h>
 
 #include <omp.h>
 #include <assert.h>
 
 #include "thread_level.h"
 
-using namespace std;
-using namespace tbb;
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
 
 // Algorithm parameters
-const int Max_OMP_Outer_Threads = 16;
-const int Max_OMP_Inner_Threads = 16;
+const int Max_OMP_Outer_Threads = 8;
 
 // Global variables
 int max_outer_threads = Max_OMP_Outer_Threads;
-int max_inner_threads = Max_OMP_Inner_Threads;
 
 // Print help on command-line arguments
 void help_message(char *prog_name) {
@@ -57,22 +64,16 @@ void help_message(char *prog_name) {
   fprintf(stderr, 
 	  "  Parameters:\n"
 	  "    -o<num> : max # of threads OMP should use at outer level\n"
-	  "    -i<num> : max # of threads OMP should use at inner level\n"
 	  "\n  Help:\n"
 	  "    -h : print this help message\n");
 }
 
 // Process command-line arguments
-void process_args(int argc, char *argv[], int *max_outer_t, int *max_inner_t) {
+void process_args(int argc, char *argv[], int *max_outer_t) {
+  (*max_outer_t) = omp_get_max_threads();
   for (int i=1; i<argc; ++i) {  
     if (argv[i][0] == '-') {
       switch (argv[i][1]) {
-      case 'i': // set max_inner_threads
-	if (sscanf(&argv[i][2], "%d", max_inner_t) != 1 || *max_inner_t < 1) {
-	  fprintf(stderr, "%s Warning: argument of -i option unacceptable: %s\n", argv[0], &argv[i][2]);
-	  help_message(argv[0]);
-	}
-	break;
       case 'o': // set max_outer_threads
 	if (sscanf(&argv[i][2], "%d", max_outer_t) != 1 || *max_outer_t < 1) {
 	  fprintf(stderr, "%s Warning: argument of -o option unacceptable: %s\n", argv[0], &argv[i][2]);
@@ -96,8 +97,10 @@ void process_args(int argc, char *argv[], int *max_outer_t, int *max_inner_t) {
 }
 
 int main(int argc, char *argv[]) { 
-  process_args(argc, argv, &max_outer_threads, &max_inner_threads);
+  process_args(argc, argv, &max_outer_threads);
+#ifdef LOG_THREADS
   TotalThreadLevel.init();
+#endif
 
   double start, end;
   start = omp_get_wtime( );
@@ -105,31 +108,45 @@ int main(int argc, char *argv[]) {
 #pragma omp parallel num_threads(max_outer_threads)
   {
     int omp_thread = omp_get_thread_num();
+#ifdef LOG_THREADS
     if (omp_thread == 0)
       TotalThreadLevel.change_level(omp_get_num_threads(), omp_outer);
+#endif
     if (omp_thread == 0) {
-      sleep(3);
+      MilliSleep(3000);
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(-1, omp_outer);
-#pragma omp parallel num_threads(max_inner_threads)
+#endif
+#pragma omp parallel
       {
 	int my_omp_thread = omp_get_thread_num();
+#ifdef LOG_THREADS
 	if (my_omp_thread == 0)
 	  TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);
+#endif
 	printf("Inner thread %d nested inside outer thread %d\n", my_omp_thread, omp_thread);
+#ifdef LOG_THREADS
 	if (my_omp_thread == 0)
 	  TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);
+#endif
       }
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(1, omp_outer);
+#endif
     }
     else {
-      sleep(6);
+      MilliSleep(6000);
     }
+#ifdef LOG_THREADS
     if (omp_thread == 0)
       TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);
+#endif
   }
   end = omp_get_wtime( );
-  printf("Simple test of nested OMP (%d outer threads max, %d inner threads max) took: %6.6f\n",
-	 max_outer_threads, max_inner_threads, end-start);
+  printf("Simple test of nested OMP (%d outer threads max) took: %6.6f\n",
+	 max_outer_threads, end-start);
+#ifdef LOG_THREADS
   TotalThreadLevel.dump();
+#endif
   return 0;
 }
diff --git a/src/rml/perfor/omp_simple.cpp b/src/rml/perfor/omp_simple.cpp
index 3436778..ddfcef8 100644
--- a/src/rml/perfor/omp_simple.cpp
+++ b/src/rml/perfor/omp_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,22 +32,31 @@
 #include <float.h>
 #include <math.h>
 #include <time.h>
-#include <unistd.h>
-#include <pthread.h>
 
 #include <omp.h>
 #include <assert.h>
 
 #include "thread_level.h"
-#define LOG_THREADS
 
 #include "tbb/task.h"
-#include "tbb/tick_count.h"
 #include "tbb/task_scheduler_init.h"
-#include "tbb/scalable_allocator.h"
 #include "tbb/parallel_for.h"
 #include "tbb/blocked_range.h"
 
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
 using namespace std;
 using namespace tbb;
 
@@ -107,8 +116,8 @@ int main(int argc, char *argv[]) {
   process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
   TotalThreadLevel.init();
 
-  tick_count start, end;
-  start = tick_count::now();
+  double start, end;
+  start = omp_get_wtime();
   
 #pragma omp parallel num_threads(max_omp_threads)
   {
@@ -119,7 +128,7 @@ int main(int argc, char *argv[]) {
 #endif
     task_scheduler_init phase(max_tbb_threads);
     if (omp_thread == 0) {
-      sleep(3);
+      MilliSleep(3000);
 #ifdef LOG_THREADS
       TotalThreadLevel.change_level(-1, omp_outer);
 #endif
@@ -142,16 +151,16 @@ int main(int argc, char *argv[]) {
 #endif
     }
     else {
-      sleep(6);
+      MilliSleep(6000);
     }
 #ifdef LOG_THREADS
     if (omp_thread == 0)
       TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);
 #endif
   }
-  end = tick_count::now();
+  end = omp_get_wtime();
   printf("Simple test of OMP (%d threads max) with TBB (%d threads max) inside took: %6.6f\n",
-	 max_omp_threads, max_tbb_threads, (end-start).seconds());
+	 max_omp_threads, max_tbb_threads, end-start);
 #ifdef LOG_THREADS
   TotalThreadLevel.dump();
 #endif
diff --git a/src/rml/perfor/tbb_multi_omp.cpp b/src/rml/perfor/tbb_multi_omp.cpp
index c3432f2..9f4442b 100644
--- a/src/rml/perfor/tbb_multi_omp.cpp
+++ b/src/rml/perfor/tbb_multi_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,8 +32,6 @@
 #include <float.h>
 #include <math.h>
 #include <time.h>
-#include <unistd.h>
-#include <pthread.h>
 
 #include <omp.h>
 #include <assert.h>
@@ -45,6 +43,20 @@
 #include "tbb/task_scheduler_init.h"
 #include "tbb/scalable_allocator.h"
 
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
 using namespace std;
 using namespace tbb;
 
@@ -106,7 +118,9 @@ class SimpleTask : public task {
 public:
   SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}
   task* execute() {
+#ifdef LOG_THREADS
     TotalThreadLevel.change_level(1, tbb_outer);
+#endif
     omp_set_num_threads(max_omp_threads);
     if (!isLeaf) {
       set_ref_count(65);
@@ -114,55 +128,67 @@ public:
 	SimpleTask& st = *new(allocate_child()) SimpleTask(true, i);
 	spawn(st);
       }
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
       wait_for_all();
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(1, tbb_outer);
+#endif
     }
     else {
       if (myId%2 == 0) {
-	sleep(3);
-	TotalThreadLevel.change_level(-1, tbb_outer);
+	MilliSleep(3000);
 #pragma omp parallel
 	{
-	  if (omp_get_thread_num() == 0) {
-	    TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);
-	  }
-	  printf("In OMP parallel region on TBB task with myId=0: thread %d of %d\n", 
-		 omp_get_thread_num(), omp_get_num_threads());
-	  if (omp_get_thread_num() == 0) {
-	    TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);
-	  }
+#ifdef LOG_THREADS
+	  if (omp_get_thread_num() == 0)
+	    TotalThreadLevel.change_level(omp_get_num_threads()-1, omp_inner);
+#endif
+	  //printf("In OMP parallel region on TBB task with myId=0: thread %d of %d\n", omp_get_thread_num(), omp_get_num_threads());
+#ifdef LOG_THREADS
+	  if (omp_get_thread_num() == 0)
+	    TotalThreadLevel.change_level(-(omp_get_num_threads()-1), omp_inner);
+#endif
 	}
-	TotalThreadLevel.change_level(1, tbb_outer);
       }
       else {
-	sleep(6);
+	MilliSleep(6000);
       }
     }
+#ifdef LOG_THREADS
     TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
     return NULL;
   }
 };
 
 
 int main(int argc, char *argv[]) { 
+#ifdef LOG_THREADS
   TotalThreadLevel.init();
-  int dbg=0;
   TotalThreadLevel.change_level(1, tbb_outer);
+#endif
   process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
 
   task_scheduler_init phase(max_tbb_threads);
   tick_count start, end;
   start = tick_count::now();
   SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
   task::spawn_root_and_wait(st);
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(1, tbb_outer);
+#endif
   end = tick_count::now();
   printf("Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\n", 
 	 max_tbb_threads, max_omp_threads, (end-start).seconds());
 
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(-1, tbb_outer);
   TotalThreadLevel.dump();
+#endif
   return 0;
 }
diff --git a/src/rml/perfor/tbb_simple.cpp b/src/rml/perfor/tbb_simple.cpp
index a72ed0d..0b01fa9 100644
--- a/src/rml/perfor/tbb_simple.cpp
+++ b/src/rml/perfor/tbb_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,8 +32,6 @@
 #include <float.h>
 #include <math.h>
 #include <time.h>
-#include <unistd.h>
-#include <pthread.h>
 
 #include <omp.h>
 #include <assert.h>
@@ -43,7 +41,20 @@
 #include "tbb/task.h"
 #include "tbb/tick_count.h"
 #include "tbb/task_scheduler_init.h"
-#include "tbb/scalable_allocator.h"
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
 
 using namespace std;
 using namespace tbb;
@@ -106,7 +117,9 @@ class SimpleTask : public task {
 public:
   SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}
   task* execute() {
+#ifdef LOG_THREADS
     TotalThreadLevel.change_level(1, tbb_outer);
+#endif
     omp_set_num_threads(max_omp_threads);
     if (!isLeaf) {
       set_ref_count(17);
@@ -114,54 +127,73 @@ public:
 	SimpleTask& st = *new(allocate_child()) SimpleTask(true, i);
 	spawn(st);
       }
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
       wait_for_all();
+#ifdef LOG_THREADS
       TotalThreadLevel.change_level(1, tbb_outer);
+#endif
     }
     else {
       if (myId == 0) {
-	sleep(3);
+	MilliSleep(3000);
+#ifdef LOG_THREADS
 	TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
 #pragma omp parallel
 	{
-	  if (omp_get_thread_num() == 0) {
+#ifdef LOG_THREADS
+	  if (omp_get_thread_num() == 0)
 	    TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);
-	  }
+#endif
 	  printf("In OMP parallel region on TBB task with myId=0: thread %d of %d\n", 
 		 omp_get_thread_num(), omp_get_num_threads());
-	  if (omp_get_thread_num() == 0) {
+#ifdef LOG_THREADS
+	  if (omp_get_thread_num() == 0)
 	    TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);
-	  }
+#endif
 	}
+#ifdef LOG_THREADS
 	TotalThreadLevel.change_level(1, tbb_outer);
+#endif
       }
       else {
-	sleep(6);
+	MilliSleep(6000);
       }
     }
+#ifdef LOG_THREADS
     TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
     return NULL;
   }
 };
 
 
 int main(int argc, char *argv[]) { 
+#ifdef LOG_THREADS
   TotalThreadLevel.init();
   TotalThreadLevel.change_level(1, tbb_outer);
+#endif
   process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
 
   task_scheduler_init phase(max_tbb_threads);
   tick_count start, end;
   start = tick_count::now();
   SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
   task::spawn_root_and_wait(st);
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(1, tbb_outer);
+#endif
   end = tick_count::now();
   printf("Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\n", 
 	 max_tbb_threads, max_omp_threads, (end-start).seconds());
-
+#ifdef LOG_THREADS
   TotalThreadLevel.change_level(-1, tbb_outer);
   TotalThreadLevel.dump();
+#endif
   return 0;
 }
diff --git a/src/rml/perfor/thread_level.h b/src/rml/perfor/thread_level.h
index a73afa8..339b72e 100644
--- a/src/rml/perfor/thread_level.h
+++ b/src/rml/perfor/thread_level.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,11 +31,12 @@
 #define __THREAD_LEVEL_H
 #include <cstdio>
 #include <omp.h>
+#include <assert.h>
 #include "tbb/atomic.h"
 #include "tbb/tick_count.h"
-#include "../src/test/harness.h"
 
 //#define LOG_THREADS // use this to ifdef out calls to this class 
+//#define NO_BAIL_OUT // continue execution after detecting oversubscription
 
 using namespace tbb;
 
@@ -103,7 +104,8 @@ void ThreadLevelRecorder::change_level(int delta, client_t whichClient) {
     }
 #else
     dump();
-    ASSERT(tot_threads <= max_threads, errStr);
+    printf("%s\n", errStr);
+    assert(tot_threads <= max_threads);
 #endif
   }
 }
diff --git a/src/rml/server/index.html b/src/rml/server/index.html
index e2750c6..238b166 100644
--- a/src/rml/server/index.html
+++ b/src/rml/server/index.html
@@ -7,7 +7,7 @@ This directory has source code internal to the server.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/rml/server/irml.rc b/src/rml/server/irml.rc
index 35e5db8..60c6275 100644
--- a/src/rml/server/irml.rc
+++ b/src/rml/server/irml.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -90,14 +90,14 @@ BEGIN
             VALUE "FileDescription", "Resource manager library\0"
             VALUE "FileVersion", TBB_VERSION "\0"
 //what is it?            VALUE "InternalName", "irml\0"
-            VALUE "LegalCopyright", "Copyright (C) 2009\0"
+            VALUE "LegalCopyright", "Copyright 2005-2010 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "irml.dll\0"
 #else
             VALUE "OriginalFilename", "irml_debug.dll\0"
 #endif
-            VALUE "ProductName", "Threading Building Blocks\0"
+            VALUE "ProductName", "Intel(R) Threading Building Blocks for Windows\0"
             VALUE "ProductVersion", TBB_VERSION "\0"
             VALUE "Comments", TBB_VERSION_STRINGS "\0"
             VALUE "PrivateBuild", "\0"
diff --git a/src/rml/server/job_automaton.h b/src/rml/server/job_automaton.h
index 7e3c4f3..049a4e3 100644
--- a/src/rml/server/job_automaton.h
+++ b/src/rml/server/job_automaton.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/server/lin-rml-export.def b/src/rml/server/lin-rml-export.def
index 2c332aa..868b65a 100644
--- a/src/rml/server/lin-rml-export.def
+++ b/src/rml/server/lin-rml-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/server/rml_server.cpp b/src/rml/server/rml_server.cpp
index 0ffdfe7..77b8ac1 100644
--- a/src/rml/server/rml_server.cpp
+++ b/src/rml/server/rml_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,9 +33,6 @@
 
 #include "tbb/tbb_allocator.h"
 #include "tbb/cache_aligned_allocator.h"
-#include "job_automaton.h"
-#include "wait_counter.h"
-#include "thread_monitor.h"
 #include "tbb/aligned_space.h"
 #include "tbb/atomic.h"
 #include "tbb/tbb_misc.h"           // Get DetectNumberOfWorkers() from here.
@@ -49,6 +46,10 @@
 #pragma warning( pop )
 #endif
 
+#include "job_automaton.h"
+#include "wait_counter.h"
+#include "thread_monitor.h"
+
 namespace rml {
 
 namespace internal {
@@ -77,14 +78,6 @@ template<typename Server, typename Client> class generic_connection;
 class tbb_connection_v1;
 class omp_connection_v1;
 
-enum request_kind {
-    rk_none,
-    rk_initialize_tbb_job,
-    rk_terminate_tbb_job,
-    rk_initialize_omp_job,
-    rk_terminate_omp_job
-};
-
 //! State of a server_thread
 /** Below is a diagram of legal state transitions.
 
@@ -268,9 +261,9 @@ private:
     template<typename Connection>
     bool destroy_job( Connection& c );
 
-    //! Process requests
+    //! do terminate the thread
     /** Return true if thread must quit. */
-    bool process_requests();
+    bool do_termination();
 
     void loop();
     static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg ); 
@@ -281,7 +274,7 @@ public:
         return thread_state_t(s);
     }
 
-    tbb::atomic<request_kind> request;
+    tbb::atomic<bool> terminate;
 
     omp_dispatch_type omp_dispatch;
 
@@ -357,8 +350,8 @@ public:
     typedef array_type::iterator iterator;
     iterator begin() {return my_array.begin();}
     iterator end() {return my_array.end();}
-    void bind( /* rml::server& server, message_kind initialize */ );
-    void unbind( request_kind terminate );
+    void bind();
+    void unbind();
     void assist_cleanup( bool assist_null_only );
 
     /** Returns number of unrealized threads to create. */
@@ -371,7 +364,7 @@ public:
     /** Return NULL if out of unrealized threads. */
     value_type* add_one_thread( bool is_omp_thread_ );
 
-    void bind_one_thread( rml::server& server, request_kind initialize, value_type& x );
+    void bind_one_thread( rml::server& server, value_type& x );
 
     void remove_client_ref();
     int add_server_ref() {return my_server_ref_count.add_ref();}
@@ -400,7 +393,7 @@ private:
     wait_counter& my_factory_counter;
 };
 
-void thread_map::bind_one_thread( rml::server& server, request_kind initialize, value_type& x ) {
+void thread_map::bind_one_thread( rml::server& server, value_type& x ) {
     // Add one to account for the thread referencing this map hereforth.
     server_thread& t = x.thread();
     my_server_ref_count.add_ref();
@@ -413,7 +406,6 @@ void thread_map::bind_one_thread( rml::server& server, request_kind initialize,
     // Have responsibility to start the thread.
     t.my_conn = &server;
     t.my_ja = &x.my_automaton;
-    t.request = initialize;
     t.launch( my_min_stack_size );
     // Must wakeup thread so it can fill in its "my_job" field in *this.
     // Otherwise deadlock can occur where wait_for_job spins on thread that is sleeping.
@@ -440,19 +432,19 @@ thread_map::value_type* thread_map::add_one_thread( bool is_omp_thread_ ) {
     return &v;
 }
 
-void thread_map::bind( /* rml::server& server, request_kind initialize */ ) {
+void thread_map::bind() {
     ++my_factory_counter;
     my_min_stack_size = my_client.min_stack_size();
     __TBB_ASSERT( my_unrealized_threads==0, "already called bind?" );
     my_unrealized_threads = my_client.max_job_count();
 }
 
-void thread_map::unbind( request_kind terminate ) {
+void thread_map::unbind() {
     // Ask each server_thread to cleanup its job for this server.
     for( iterator i=begin(); i!=end(); ++i ) {
         server_thread& t = i->thread();
         // The last parameter of the message is not used by the recipient. 
-        t.request = terminate;
+        t.terminate = true;
         t.wakeup( ts_idle, ts_asleep );
     }
     // Remove extra ref to client.
@@ -553,8 +545,6 @@ public:
 
 template<>
 struct connection_traits<tbb_server,tbb_client> {
-    static const request_kind initialize = rk_initialize_tbb_job;
-    static const request_kind terminate = rk_terminate_tbb_job;
     static const bool assist_null_only = true;
     static const bool is_tbb = true;
 };
@@ -585,11 +575,12 @@ public:
     //! True if there is slack that try_process can use.
     bool has_slack() const {return my_slack>0;}
 
-    bool try_process( job& job ) {
+    bool try_process( server_thread& t, job& job ) {
         bool visited = false;
         // No check for my_slack>0 here because caller is expected to do that check.
         int k = --my_slack;
         if( k>=0 ) {
+            t.tbb_state = ts_visited; // remember the thread paid a trip to process() at least once
             client().process(job);
             visited = true;
         }
@@ -670,8 +661,6 @@ void thread_map::adjust_balance( int delta ) {
 
 template<>
 struct connection_traits<omp_server,omp_client> {
-    static const request_kind initialize = rk_initialize_omp_job;
-    static const request_kind terminate = rk_terminate_omp_job;
     static const bool assist_null_only = false;
     static const bool is_tbb = false;
 };
@@ -715,7 +704,7 @@ void generic_connection<Server,Client>::request_close_connection() {
 #if _MSC_VER && !defined(__INTEL_COMPILER)
 #pragma warning( pop )
 #endif
-    my_thread_map.unbind( connection_traits<Server,Client>::terminate );
+    my_thread_map.unbind();
     my_thread_map.assist_cleanup( connection_traits<Server,Client>::assist_null_only );
     // Remove extra reference
     remove_server_ref();
@@ -766,7 +755,7 @@ void tbb_connection_v1::adjust_job_count_estimate( int delta ) {
                 // No unrealized threads left.
                 break;
             // eagerly start the thread off.
-            my_thread_map.bind_one_thread( *this, rk_initialize_tbb_job, *k );
+            my_thread_map.bind_one_thread( *this, *k );
             server_thread& t = k->thread();
             __TBB_ASSERT( !t.link, NULL );
             t.link = new_threads_anchor;
@@ -915,7 +904,7 @@ void omp_connection_v1::get_threads( size_type request_size, void* cookie, job*
                 fprintf(stderr,"server::get_threads: exceeded job_count\n");
                 __TBB_ASSERT(false, NULL);
             }
-            my_thread_map.bind_one_thread( *this, rk_initialize_omp_job, *k );
+            my_thread_map.bind_one_thread( *this, *k );
             server_thread& t = k->thread();
             if( t.try_grab_for( ts_omp_busy ) ) {
                 job& j = k->wait_for_job();
@@ -961,6 +950,7 @@ server_thread::server_thread() :
     my_conn(NULL), my_job(NULL), my_ja(NULL)
 {
     state = ts_idle;
+    terminate = false;
 #if TBB_USE_ASSERT
     has_active_thread = false;
 #endif /* TBB_USE_ASSERT */
@@ -994,11 +984,12 @@ void server_thread::launch( size_t stack_size ) {
 }
 
 void server_thread::sleep_perhaps( thread_state_t asleep ) {
+    if( terminate ) return;
     __TBB_ASSERT( asleep==ts_asleep, NULL );
     thread_monitor::cookie c; 
     monitor.prepare_wait(c);
     if( state.compare_and_swap( asleep, ts_idle )==ts_idle ) {
-        if( request==rk_none ) {
+        if( !terminate ) {
             monitor.commit_wait(c);
             // Someone else woke me up.  The compare_and_swap further below deals with spurious wakeups.
         } else {
@@ -1092,46 +1083,28 @@ bool server_thread::destroy_job( Connection& c ) {
     return true;
 }
 
-bool server_thread::process_requests() {
-    __TBB_ASSERT( request!=rk_none, "should only be called when at least one request is present" );
-    do {
-        request_kind my_req = request;
-        request.compare_and_swap( rk_none, my_req );
-        switch( my_req ) {
-            case rk_initialize_tbb_job: 
-                static_cast<tbb_connection_v1*>(my_conn)->make_job( *this, *my_ja );
-                break;
-            
-            case rk_initialize_omp_job: 
-                static_cast<omp_connection_v1*>(my_conn)->make_job( *this, *my_ja );
-                break;
-
-            case rk_terminate_tbb_job:
-                if( destroy_job( *static_cast<tbb_connection_v1*>(my_conn) ) )
-                    return true;
-                break; 
-
-            case rk_terminate_omp_job:
-                if( destroy_job( *static_cast<omp_connection_v1*>(my_conn) ) )
-                    return true;
-                break; 
-            default:
-                break;
-         }
-    } while( request!=rk_none );
-    return false;
+bool server_thread::do_termination() {
+    if( is_omp_thread )
+        return destroy_job( *static_cast<omp_connection_v1*>(my_conn) );
+    else
+        return destroy_job( *static_cast<tbb_connection_v1*>(my_conn) );
 }
 
 //! Loop that each thread executes
 void server_thread::loop() {
+    if( is_omp_thread )
+        static_cast<omp_connection_v1*>(my_conn)->make_job( *this, *my_ja );
+    else        
+        static_cast<tbb_connection_v1*>(my_conn)->make_job( *this, *my_ja );
+
     for(;;) {
         __TBB_Yield();
         if( state==ts_idle )
             sleep_perhaps( ts_asleep );   
 
         // Drain mailbox before reading the state.
-        if( request!=rk_none ) 
-            if( process_requests() )
+        if( terminate )
+            if( do_termination() )
                 return;     
              
         // read the state after draining the mail box
@@ -1153,8 +1126,7 @@ void server_thread::loop() {
             // give openmp higher priority
             bool has_coin = true;
             while( has_coin && conn.has_slack() && the_balance>=0 ) {
-                if( conn.try_process(*my_job) ) {
-                    tbb_state = ts_visited;
+                if( conn.try_process(*this, *my_job) ) {
                     if( conn.has_slack() && the_balance>=0 )
                         has_coin = !conn.wakeup_next_thread( my_map_pos );
                 }
diff --git a/src/rml/server/thread_monitor.h b/src/rml/server/thread_monitor.h
index 607188b..804ed48 100644
--- a/src/rml/server/thread_monitor.h
+++ b/src/rml/server/thread_monitor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,6 +43,7 @@
 #error Unsupported platform
 #endif 
 #include <stdio.h>
+#include "tbb/itt_notify.h"
 
 // All platform-specific threading support is in this header.
 
@@ -66,6 +67,12 @@ namespace rml {
 
 namespace internal {
 
+#if DO_ITT_NOTIFY
+static const ::tbb::tchar *SyncType_RML = _T("%Constant");
+static const ::tbb::tchar *SyncObj_ThreadMonitorLock = _T("RML Lock"),
+                          *SyncObj_ThreadMonitor = _T("RML Thr Monitor");
+#endif /* DO_ITT_NOTIFY */
+
 //! Monitor with limited two-phase commit form of wait.  
 /** At most one thread should wait on an instance at a time. */
 class thread_monitor {
@@ -142,12 +149,17 @@ inline void thread_monitor::yield() {
 inline thread_monitor::thread_monitor() {
     event = CreateEvent( NULL, /*manualReset=*/true, /*initialState=*/false, NULL );
     InitializeCriticalSection( &critical_section );
+    ITT_SYNC_CREATE(&event, SyncType_RML, SyncObj_ThreadMonitor);
+    ITT_SYNC_CREATE(&critical_section, SyncType_RML, SyncObj_ThreadMonitorLock);
     my_cookie.my_version = 0;
 }
 
 inline thread_monitor::~thread_monitor() {
+    // Fake prepare/acquired pair for Intel(R) Parallel Amplifier to correctly attribute the operations below
+    ITT_NOTIFY( sync_prepare, &event );
     CloseHandle( event );
     DeleteCriticalSection( &critical_section );
+    ITT_NOTIFY( sync_acquired, &event );
 }
      
 inline void thread_monitor::notify() {
@@ -204,8 +216,10 @@ inline void thread_monitor::yield() {
 }
 
 inline thread_monitor::thread_monitor() {
-    check( pthread_mutex_init(&my_mutex,NULL), "pthread_mutex_init" );
     check( pthread_cond_init(&my_cond,NULL), "pthread_cond_init" );
+    check( pthread_mutex_init(&my_mutex,NULL), "pthread_mutex_init" );
+    ITT_SYNC_CREATE(&my_cond, SyncType_RML, SyncObj_ThreadMonitor);
+    ITT_SYNC_CREATE(&my_mutex, SyncType_RML, SyncObj_ThreadMonitorLock);
     my_cookie.my_version = 0;
 }
 
diff --git a/src/rml/server/wait_counter.h b/src/rml/server/wait_counter.h
index 0951f97..4018d1b 100644
--- a/src/rml/server/wait_counter.h
+++ b/src/rml/server/wait_counter.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/server/win32-rml-export.def b/src/rml/server/win32-rml-export.def
index 54be4b1..7902330 100644
--- a/src/rml/server/win32-rml-export.def
+++ b/src/rml/server/win32-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/rml/server/win64-rml-export.def b/src/rml/server/win64-rml-export.def
index 54be4b1..7902330 100644
--- a/src/rml/server/win64-rml-export.def
+++ b/src/rml/server/win64-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/rml/test/rml_omp_stub.cpp b/src/rml/test/rml_omp_stub.cpp
index d9d6ba4..f0a9587 100644
--- a/src/rml/test/rml_omp_stub.cpp
+++ b/src/rml/test/rml_omp_stub.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -60,7 +60,12 @@ public:
 //! Never actually set, because point of test is to find linkage issues.
 __kmp::rml::omp_server* MyServerPtr;
 
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#define HARNESS_CUSTOM_MAIN 1
+#include "harness.h"
+
 extern "C" void Cplusplus() {
     MyClient client;
     Version = client.version();
+    REPORT("done\n");
 }
diff --git a/src/rml/test/test_job_automaton.cpp b/src/rml/test/test_job_automaton.cpp
index 29fd792..0aae636 100644
--- a/src/rml/test/test_job_automaton.cpp
+++ b/src/rml/test/test_job_automaton.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -96,7 +96,7 @@ void State::exercise( bool is_owner ) {
         // Using extra bit of DelayMask for choosing whether to run wait_for_job or not.
         if( DelayMask&1<<N ) {
             rml::job* j= &ja.wait_for_job(); 
- if( j!=&job ) printf("%p\n",j);
+            if( j!=&job ) REPORT("%p\n",j);
             ASSERT( j==&job, NULL );
             job_received = true;
         }
@@ -133,13 +133,13 @@ bool CheckCoverage( bool report ) {
         if( Coverage[i]<min_coverage ) {
             okay = false;
             if( report )
-                printf("Warning: Coverage[%d]=%d is less than acceptable minimum of %d\n", i, int(Coverage[i]),min_coverage);
+                REPORT("Warning: Coverage[%d]=%d is less than acceptable minimum of %d\n", i, int(Coverage[i]),min_coverage);
         }
     }
     return okay;
 }
 
-int main() {
+int TestMain () {
     for( DelayMask=0; DelayMask<8<<N; ++DelayMask ) {
         State s;
         NativeParallelFor( 2, Loop(s) );
@@ -149,6 +149,5 @@ int main() {
         }
     }
     CheckCoverage(true);
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/rml/test/test_rml_mixed.cpp b/src/rml/test/test_rml_mixed.cpp
index b70d914..b31cd16 100644
--- a/src/rml/test/test_rml_mixed.cpp
+++ b/src/rml/test/test_rml_mixed.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,8 @@
 #include "rml_omp.h"
 #include "tbb/atomic.h"
 #include "tbb/tick_count.h"
+
+#define HARNESS_DEFAULT_MIN_THREADS 4
 #include "harness.h"
 
 const int OMP_ParallelRegionSize = 16;
@@ -228,13 +230,9 @@ void TBBOutSideOpenMPInside() {
     TotalThreadLevel.change_level(-1);
 }  
 
-int main( int argc, char* argv[] ) {
-    // Set defaults
-    MinThread = 4;
-    MaxThread = 4;
-    ParseCommandLine(argc,argv);
+int TestMain () {
     for( int TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {
-        if( Verbose ) printf("Testing with TBB_MaxThread=%d\n", TBB_MaxThread);
+        REMARK("Testing with TBB_MaxThread=%d\n", TBB_MaxThread);
         TBB_RunTime.create_connection();
         OMP_RunTime.create_connection();
         TBBOutSideOpenMPInside();
@@ -242,6 +240,5 @@ int main( int argc, char* argv[] ) {
         TBB_RunTime.destroy_connection();
     }
     TotalThreadLevel.dump();
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/rml/test/test_rml_omp.cpp b/src/rml/test/test_rml_omp.cpp
index fedf851..df885be 100644
--- a/src/rml/test/test_rml_omp.cpp
+++ b/src/rml/test/test_rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,8 @@
     the GNU General Public License.
 */
 
+#define HARNESS_DEFAULT_MIN_THREADS 0
+
 #include "rml_omp.h"
 #include "test_server.h"
 #include "tbb/tbb_misc.h"
@@ -104,9 +106,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
             // Case 3 is same code as the default, but has effect of increasing the number of threads.
         }
         team.barrier = 0;
-        if( Verbose ) {
-            printf("client %d: server.run with n_thread=%d\n", client.client_id(), int(n_thread) );
-        }
+        REMARK("client %d: server.run with n_thread=%d\n", client.client_id(), int(n_thread) );
         server.independent_thread_number_changed( n_extra );
         if( checker ) {
             // Give RML time to respond to change in number of threads.
@@ -124,9 +124,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
             ASSERT( s==MyJob::idle||s==MyJob::busy, NULL );
         }
         server.independent_thread_number_changed( -n_extra );
-        if( Verbose ) {
-            printf("client %d: team size is %d\n", client.client_id(), n_delivered);
-        }
+        REMARK("client %d: team size is %d\n", client.client_id(), n_delivered);
         if( checker ) {
             checker->check_number_of_threads_delivered( n_delivered, n_thread, n_extra );
         }      
@@ -136,9 +134,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
             ASSERT( team.barrier<=n_delivered, NULL );
             __TBB_Yield();
         }
-        if( Verbose ) {
-            printf("client %d: team completed\n", client.client_id() );
-        }
+        REMARK("client %d: team completed\n", client.client_id() );
         for( int i=0; i<n_delivered; ++i ) {
             ASSERT( team.info[i].ran, "thread on team allegedly delivered, but did not run?" );
         }
@@ -154,12 +150,8 @@ void DoClientSpecificVerification( MyServer& server, int /*n_thread*/ )
     ASSERT( server.current_balance()==int(tbb::internal::DetectNumberOfWorkers())-1, NULL );
 }
 
-int main( int argc, char* argv[] ) {
-    // Set defaults
-    MinThread = 0;
-    MaxThread = 4;
-    ParseCommandLine(argc,argv);
 
+int TestMain () {
     StrictTeam = true;
     VerifyInitialization<MyFactory,MyClient>( MaxThread );
     SimpleTest<MyFactory,MyClient>();
@@ -168,6 +160,5 @@ int main( int argc, char* argv[] ) {
     VerifyInitialization<MyFactory,MyClient>( MaxThread );
     SimpleTest<MyFactory,MyClient>();
 
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/rml/test/test_rml_omp_c_linkage.c b/src/rml/test/test_rml_omp_c_linkage.c
index e94790f..cb984bd 100644
--- a/src/rml/test/test_rml_omp_c_linkage.c
+++ b/src/rml/test/test_rml_omp_c_linkage.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,12 +26,9 @@
     the GNU General Public License.
 */
 
-#include <stdio.h>
-
 void Cplusplus();
 
 int main() {
     Cplusplus();      
-    printf("done\n");
     return 0;
 } 
diff --git a/src/rml/test/test_rml_tbb.cpp b/src/rml/test/test_rml_tbb.cpp
index a3cd666..eb423a7 100644
--- a/src/rml/test/test_rml_tbb.cpp
+++ b/src/rml/test/test_rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,8 @@
     the GNU General Public License.
 */
 
+#define HARNESS_DEFAULT_MIN_THREADS 0
+
 #include "rml_tbb.h"
 #include "test_server.h"
 
@@ -44,8 +46,7 @@ public:
 };
 
 void FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra, Checker* checker ) {
-    if( Verbose ) 
-        printf("client %d: calling adjust_job_count_estimate(%d)\n", client.client_id(),n_thread); 
+    REMARK("client %d: calling adjust_job_count_estimate(%d)\n", client.client_id(),n_thread);
     // Exercise independent_thread_number_changed, even for zero values.
     server.independent_thread_number_changed( n_extra );
     // Experiments indicate that when oversubscribing, the main thread should wait a little
@@ -68,8 +69,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra,
     // Logic further below presumes that jobs never starve, so undo previous call
     // to independent_thread_number_changed before waiting on those jobs.
     server.independent_thread_number_changed( -n_extra );
-    if( Verbose ) 
-        printf("client %d: wait for each job to be processed at least once\n",client.client_id());
+    REMARK("client %d: wait for each job to be processed at least once\n",client.client_id());
     // Calculate the number of jobs that are expected to get threads.
     // Typically this is equal to n_thread.  But if nested, subtract 1 to account for the fact
     // that this thread itself cannot process the job.
@@ -85,7 +85,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra,
             server.yield();
         }
     } else {
-        printf("testing of nested tbb execution is yet to be supported\n");
+        REPORT("testing of nested tbb execution is yet to be supported\n");
     }
     server.adjust_job_count_estimate(-n_thread);
     if( checker ) 
@@ -110,13 +110,8 @@ void DoClientSpecificVerification( MyServer&, int n_thread )
     delete client;
 }
 
-int main( int argc, char* argv[] ) {
-    // Set defaults
-    MinThread = 0;
-    MaxThread = 4;
-    ParseCommandLine(argc,argv);
+int TestMain () {
     VerifyInitialization<MyFactory,MyClient>( MaxThread );
     SimpleTest<MyFactory,MyClient>();
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/rml/test/test_server.h b/src/rml/test/test_server.h
index 65e07af..64866f7 100644
--- a/src/rml/test/test_server.h
+++ b/src/rml/test/test_server.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -185,13 +185,11 @@ public:
     }
 
     /*override*/void cleanup( job& j_ ) {
-        if( Verbose ) 
-            printf("client %d: cleanup(%p) called\n",client_id(),&j_);
+        REMARK("client %d: cleanup(%p) called\n",client_id(),&j_);
         ASSERT( state==live, NULL );
         MyJob& j = static_cast<MyJob&>(j_);
         j.update(MyJob::clean,MyJob::idle);
-        if( Verbose ) 
-            printf("client %d: cleanup(%p) returns\n",client_id(),&j_);
+        REMARK("client %d: cleanup(%p) returns\n",client_id(),&j_);
     }
    
     job* create_one_job();
@@ -242,8 +240,7 @@ public:
 
 template<typename Client>
 typename Client::job* ClientBase<Client>::create_one_job() {
-    if( Verbose ) 
-        printf("client %d: create_one_job() called\n",client_id());
+    REMARK("client %d: create_one_job() called\n",client_id());
     size_t k = next_job_index++;
     ASSERT( state==live, NULL );
     // Following assertion depends on assumption that implementation does not destroy jobs until 
@@ -253,8 +250,7 @@ typename Client::job* ClientBase<Client>::create_one_job() {
     ASSERT( k<JobArraySize, "JobArraySize not big enough (problem is in test, not RML)" );
     MyJob& j = job_array[k];
     j.update(MyJob::idle,MyJob::unallocated);
-    if( Verbose ) 
-        printf("client %d: create_one_job() for k=%d returns %p\n",client_id(),int(k),&j);
+    REMARK("client %d: create_one_job() for k=%d returns %p\n",client_id(),int(k),&j);
     return &j;
 }
 
@@ -288,7 +284,7 @@ void Checker::check_number_of_threads_delivered( int n_delivered, int n_requeste
     else if( n_delivered<n_expected ) 
         msg = "server delivered fewer threads than ideal";
     if( msg ) {
-        printf("Warning: %s (n_delivered=%d n_avail=%d n_requested=%d n_extra=%d default_concurrency=%d)\n",
+        REPORT("Warning: %s (n_delivered=%d n_avail=%d n_requested=%d n_extra=%d default_concurrency=%d)\n",
                msg, n_delivered, n_avail, n_requested, n_extra, default_concurrency );
     }
 }
@@ -327,8 +323,7 @@ void DoOneConnection<Factory,Client>::operator()( size_t i ) const {
 
     typename Factory::server_type* server; 
     status = factory.make_server( server, *client );
-    if( Verbose ) 
-        printf("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
+    REMARK("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
                client->client_id(), n_thread, nesting.level, nesting.limit);
 
     client->set_server( server );
@@ -338,8 +333,7 @@ void DoOneConnection<Factory,Client>::operator()( size_t i ) const {
 
     // Close the connection
     client->expect_close_connection = true;
-    if( Verbose )
-        printf("client %d: calling request_close_connection\n", client->client_id());
+    REMARK("client %d: calling request_close_connection\n", client->client_id());
     server->request_close_connection();
     // Client deletes itself when it sees call to acknowledge_close_connection from server.
     factory.close();
@@ -380,8 +374,7 @@ void VerifyInitialization( int n_thread ) {
     ASSERT( status!=Factory::st_incompatible, NULL );
     ASSERT( status!=Factory::st_not_found, NULL );
     ASSERT( status==Factory::st_success, NULL );
-    if( Verbose ) 
-        printf("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
+    REMARK("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
                client->client_id(), n_thread, 0, 0);
     ASSERT( server, NULL );
     client->set_server( server );
@@ -390,8 +383,7 @@ void VerifyInitialization( int n_thread ) {
  
     // Close the connection
     client->expect_close_connection = true;
-    if( Verbose )
-        printf("client %d: calling request_close_connection\n", client->client_id());
+    REMARK("client %d: calling request_close_connection\n", client->client_id());
     server->request_close_connection();
     // Client deletes itself when it sees call to acknowledge_close_connection from server.
     factory.close();
diff --git a/src/rml/test/test_thread_monitor.cpp b/src/rml/test/test_thread_monitor.cpp
index 89ef325..2854861 100644
--- a/src/rml/test/test_thread_monitor.cpp
+++ b/src/rml/test/test_thread_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,9 +53,7 @@ void ThreadState::loop() {
             thread_monitor::cookie c;
             monitor.prepare_wait(c);
             if( ack==request ) {
-                if( Verbose ) {
-                    printf("%p: request=%d ack=%d\n", this, request, ack );
-                }
+                REMARK("%p: request=%d ack=%d\n", this, request, ack );
                 monitor.commit_wait(c);
             } else
                 monitor.cancel_wait();
@@ -78,17 +76,11 @@ void ThreadState::loop() {
 const size_t MinStackSize = 1<<18;
 const size_t MaxStackSize = 1<<22;
 
-int main( int argc, char* argv[] ) {
-    // Set defaults
-    MinThread = 1;
-    MaxThread = 4;
-    ParseCommandLine( argc, argv );
-
+int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         ThreadState* t = new ThreadState[p];
         for( size_t stack_size = MinStackSize; stack_size<=MaxStackSize; stack_size*=2 ) {
-            if( Verbose )
-                printf("launching %d threads\n",p);
+            REMARK("launching %d threads\n",p);
             for( int i=0; i<p; ++i )
                 rml::internal::thread_monitor::launch( ThreadState::routine, t+i, stack_size ); 
             for( int k=1000; k>=0; --k ) {
@@ -100,21 +92,19 @@ int main( int argc, char* argv[] ) {
                             t[i].stamp = t[i].clock;
                             rml::internal::thread_monitor::yield();
                             if( ++count>=1000 ) {
-                                printf("Warning: thread %d not waiting\n",i);
+                                REPORT("Warning: thread %d not waiting\n",i);
                                 break;
                             }
                         } while( t[i].stamp!=t[i].clock );
                     }
                 }
-                if( Verbose ) 
-                    printf("notifying threads\n");
+                REMARK("notifying threads\n");
                 for( int i=0; i<p; ++i ) {
                     // Change state visible to launched thread
                     t[i].request = k;
                     t[i].monitor.notify();
                 }
-                if( Verbose ) 
-                    printf("waiting for threads to respond\n");
+                REMARK("waiting for threads to respond\n");
                 for( int i=0; i<p; ++i ) 
                     // Wait for thread to respond 
                     while( t[i].ack!=k ) 
@@ -124,6 +114,5 @@ int main( int argc, char* argv[] ) {
         delete[] t;
     }
 
-    printf("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
index 18e3d13..8d8df6b 100644
--- a/src/tbb/cache_aligned_allocator.cpp
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,6 +28,7 @@
 
 #include "tbb/cache_aligned_allocator.h"
 #include "tbb/tbb_allocator.h"
+#include "tbb/tbb_exception.h"
 #include "tbb_misc.h"
 #include "dynamic_link.h"
 #include <cstdlib>
@@ -198,21 +199,21 @@ const size_t BigSize = 4096;
 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" );
+    __TBB_ASSERT( (m & (m-1))==0, "must be power of two" );
     size_t bytes = n*element_size;
 #if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
 
     if (bytes<n || bytes+m<bytes) {
         // Overflow
-        throw bad_alloc();
+        throw_exception(eid_bad_alloc);
     }
     
     void* result = (*padded_allocate_handler)( bytes, m );
 #else
-    unsigned char* base;
+    unsigned char* base = 0;
     if( bytes<n || bytes+m<bytes || !(base=(unsigned char*)(bytes>=BigSize?malloc(m+bytes):(*MallocHandler)(m+bytes))) ) {
         // Overflow
-        throw bad_alloc();
+        throw_exception(eid_bad_alloc);
     }
     // Round up to next line
     unsigned char* result = (unsigned char*)((uintptr)(base+m)&-m);
@@ -249,7 +250,7 @@ void NFS_Free( void* p ) {
 static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment  ) {  
     unsigned char* base;
     if( !(base=(unsigned char*)(*MallocHandler)((bytes+alignment)&-alignment))) {
-        throw bad_alloc();
+        throw_exception(eid_bad_alloc);
     }        
     return base; // scalable_malloc returns aligned pointer
 }
@@ -257,7 +258,7 @@ static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment
 static void* padded_allocate( size_t bytes, size_t alignment ) {    
     unsigned char* base;
     if( !(base=(unsigned char*)malloc(alignment+bytes)) ) {        
-        throw bad_alloc();
+        throw_exception(eid_bad_alloc);
     }
     // Round up to the next line
     unsigned char* result = (unsigned char*)((uintptr)(base+alignment)&-alignment);
@@ -282,7 +283,7 @@ void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {
     result = (*MallocHandler) (n);
     if (!result) {
         // Overflow
-        throw bad_alloc();
+        throw_exception(eid_bad_alloc);
     }
     return result;
 }
@@ -299,8 +300,8 @@ bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
         (*FreeHandler)(void_ptr);
     }
     __TBB_ASSERT( MallocHandler!=&DummyMalloc && FreeHandler!=&DummyFree, NULL );
-    __TBB_ASSERT(MallocHandler==&malloc && FreeHandler==&free ||
-                  MallocHandler!=&malloc && FreeHandler!=&free, NULL );
+    __TBB_ASSERT((MallocHandler==&malloc && FreeHandler==&free) ||
+                 (MallocHandler!=&malloc && FreeHandler!=&free), NULL );
     return MallocHandler == &malloc;
 }
 
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
index d393710..b37387d 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 33ce591..3674e30 100644
--- a/src/tbb/concurrent_queue.cpp
+++ b/src/tbb/concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,7 @@
 #include <cstring>   // for memset()
 #include "tbb/tbb_stddef.h"
 #include "tbb/tbb_machine.h"
+#include "tbb/tbb_exception.h"
 #include "tbb/_concurrent_queue_internal.h"
 #include "itt_notify.h"
 #include <new>
@@ -221,7 +222,7 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base
             // 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();
+                throw_exception( eid_bad_last_alloc );
             }
         } while( tail_counter!=k ) ;
     }
@@ -263,12 +264,7 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
         micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL ); 
         if( p.mask & uintptr(1)<<index ) {
             success = true;
-#if DO_ITT_NOTIFY
-            if( ((intptr_t)dst&1) ) {
-                dst = (void*) ((intptr_t)dst&~1);
-                ITT_NOTIFY( sync_acquired, dst );
-            }
-#endif
+            ITT_NOTIFY( sync_acquired, dst );
             ITT_NOTIFY( sync_acquired, head_page );
             base.assign_and_destroy_item( dst, p, index );
             ITT_NOTIFY( sync_releasing, head_page );
@@ -509,10 +505,7 @@ void concurrent_queue_base_v3::internal_push( const void* src ) {
         }
         e = const_cast<volatile ptrdiff_t&>(my_capacity);
     }
-#if DO_ITT_NOTIFY
-    if( sync_prepare_done )
-        ITT_NOTIFY( sync_acquired, &sync_prepare_done );
-#endif
+    ITT_NOTIFY( sync_acquired, &sync_prepare_done );
     r.choose( k ).push( src, k, *this );
 
     if( r.n_waiting_consumers>0 ) {
@@ -544,7 +537,6 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
 #if DO_ITT_NOTIFY
             if( !sync_prepare_done ) {
                 ITT_NOTIFY( sync_prepare, dst );
-                dst = (void*) ((intptr_t)dst | 1);
                 sync_prepare_done = true;
             }
 #endif
@@ -595,7 +587,6 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
 #if DO_ITT_NOTIFY
             if( !sync_prepare_done ) {
                 ITT_NOTIFY( sync_prepare, dst );
-                dst = (void*) ((intptr_t)dst | 1);
                 sync_prepare_done = true;
             }
 #endif
@@ -736,7 +727,7 @@ void concurrent_queue_base_v3::internal_finish_clear() {
 }
 
 void concurrent_queue_base_v3::internal_throw_exception() const {
-    throw bad_alloc();
+    throw_exception( eid_bad_alloc );
 }
 
 void concurrent_queue_base_v3::assign( const concurrent_queue_base& src ) {
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
index 7dc51f4..5b7adad 100644
--- a/src/tbb/concurrent_vector.cpp
+++ b/src/tbb/concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,6 +61,7 @@ public:
         return k;
     }
 
+    // TODO: optimize accesses to my_first_block
     //! assign first segment size. k - is index of last segment to be allocated, not a count of segments
     inline static void assign_first_segment_if_neccessary(concurrent_vector_base_v3 &v, segment_index_t k) {
         if( !v.my_first_block ) {
@@ -79,7 +80,7 @@ public:
 
     inline static void *allocate_segment(concurrent_vector_base_v3 &v, size_type n) {
         void *ptr = v.vector_allocator_ptr(v, n);
-        if(!ptr) throw bad_alloc(); // check for bad allocation, throw exception
+        if(!ptr) throw_exception(eid_bad_alloc); // check for bad allocation, throw exception
         return ptr;
     }
 
@@ -90,74 +91,15 @@ public:
         __TBB_store_with_release( s.array, rhs );
     }
 
-    static size_type enable_segment(concurrent_vector_base_v3 &v, size_type k, size_type element_size) {
-        segment_t* s = v.my_segment; // TODO: optimize out as argument? Optimize accesses to my_first_block
-        __TBB_ASSERT( s[k].array <= internal::vector_allocation_error_flag, "concurrent operation during growth?" );
-        if( !k ) {
-            assign_first_segment_if_neccessary(v, default_initial_segments-1);
-            try {
-                publish_segment(s[0], allocate_segment(v, segment_size(v.my_first_block) ) );
-            } catch(...) { // intercept exception here, assign internal::vector_allocation_error_flag value, re-throw exception
-                publish_segment(s[0], internal::vector_allocation_error_flag); throw;
-            }
-            return 2;
-        }
-        size_type m = segment_size(k);
-        if( !v.my_first_block ) // push_back only
-            spin_wait_while_eq( v.my_first_block, segment_index_t(0) );
-        if( k < v.my_first_block ) {
-            // 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 );
-                spin_wait_while_eq( s[0].array, (void*)0 );
-                array0 = __TBB_load_with_acquire(s[0].array);
-            }
-            ITT_NOTIFY(sync_acquired, &s[0].array);
-            if( array0 <= internal::vector_allocation_error_flag ) { // check for internal::vector_allocation_error_flag of initial segment
-                publish_segment(s[k], internal::vector_allocation_error_flag); // and assign internal::vector_allocation_error_flag here
-                throw bad_last_alloc(); // throw custom exception
-            }
-            publish_segment( s[k],
-                    static_cast<void*>( static_cast<char*>(array0) + segment_base(k)*element_size )
-            );
-        } else {
-            try {
-                publish_segment(s[k], allocate_segment(v, m));
-            } catch(...) { // intercept exception here, assign internal::vector_allocation_error_flag value, re-throw exception
-                publish_segment(s[k], internal::vector_allocation_error_flag); throw;
-            }
-        }
-        return m;
-    }
+    static size_type enable_segment(concurrent_vector_base_v3 &v, size_type k, size_type element_size);
 
+    // TODO: rename as get_segments_table() and return segment pointer
     inline static void extend_table_if_necessary(concurrent_vector_base_v3 &v, size_type k, size_type start ) {
         if(k >= pointers_per_short_table && v.my_segment == v.my_storage)
             extend_segment_table(v, start );
     }
 
-    static void extend_segment_table(concurrent_vector_base_v3 &v, size_type start) {
-        if( start > segment_size(pointers_per_short_table) ) start = segment_size(pointers_per_short_table);
-        // If other threads are trying to set pointers in the short segment, wait for them to finish their
-        // assigments before we copy the short segment to the long segment. Note: grow_to_at_least depends on it
-        for( segment_index_t i = 0; segment_base(i) < start && v.my_segment == v.my_storage; i++ )
-            if(!v.my_storage[i].array) {
-                ITT_NOTIFY(sync_prepare, &v.my_storage[i].array);
-                atomic_backoff backoff;
-                do backoff.pause(); while( v.my_segment == v.my_storage && !v.my_storage[i].array );
-                ITT_NOTIFY(sync_acquired, &v.my_storage[i].array);
-            }
-        if( v.my_segment != v.my_storage ) return;
-
-        segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_table, sizeof(segment_t), NULL );
-        // if( !s ) throw bad_alloc() -- implemented in NFS_Allocate
-        memset( s, 0, pointers_per_long_table*sizeof(segment_t) );
-        for( segment_index_t i = 0; i < pointers_per_short_table; i++)
-            s[i] = v.my_storage[i];
-        if( v.my_segment.compare_and_swap( s, v.my_storage ) != v.my_storage )
-            NFS_Free( s );
-    }
+    static void extend_segment_table(concurrent_vector_base_v3 &v, size_type start);
 
     inline static segment_t &acquire_segment(concurrent_vector_base_v3 &v, size_type index, size_type element_size, bool owner) {
         segment_t &s = v.my_segment[index]; // TODO: pass v.my_segment as arument
@@ -173,7 +115,7 @@ public:
             ITT_NOTIFY(sync_acquired, &s.array);
         }
         if( s.array <= internal::vector_allocation_error_flag ) // check for internal::vector_allocation_error_flag
-            throw bad_last_alloc(); // throw custom exception, because it's hard to recover after internal::vector_allocation_error_flag correctly
+            throw_exception(eid_bad_last_alloc); // throw custom exception, because it's hard to recover after internal::vector_allocation_error_flag correctly
         return s;
     }
 
@@ -217,36 +159,13 @@ public:
     }
     ~helper() {
         if( sz >= finish ) return; // the work is done correctly
-        if( !sz ) { // allocation failed, restore the table
-            segment_index_t k_start = k, k_end = segment_index_of(finish-1);
-            if( segment_base( k_start ) < start )
-                get_segment_ptr(k_start++, true); // wait
-            if( k_start < first_block ) {
-                void *array0 = get_segment_ptr(0, start>0); // wait if necessary
-                if( array0 && !k_start ) ++k_start;
-                if( array0 <= internal::vector_allocation_error_flag )
-                    for(; k_start < first_block && k_start <= k_end; ++k_start )
-                        publish_segment(table[k_start], internal::vector_allocation_error_flag);
-                else for(; k_start < first_block && k_start <= k_end; ++k_start )
-                        publish_segment(table[k_start], static_cast<void*>(
-                            static_cast<char*>(array0) + segment_base(k_start)*element_size) );
-            }
-            for(; k_start <= k_end; ++k_start ) // not in first block
-                if( !__TBB_load_with_acquire(table[k_start].array) )
-                    publish_segment(table[k_start], internal::vector_allocation_error_flag);
-            // fill alocated items
-            first_segment();
-            goto recover;
-        }
-        while( sz <= finish ) { // there is still work for at least one segment
-            next_segment();
-recover:
-            void *array = table[k].array;
-            if( array > internal::vector_allocation_error_flag )
-                std::memset( static_cast<char*>(array)+element_size*start, 0, ((sz<finish?sz:finish) - start)*element_size );
-            else __TBB_ASSERT( array == internal::vector_allocation_error_flag, NULL );
-        }
+        cleanup();
     }
+
+    //! Out of line code to assists destructor in infrequent cases.
+    void cleanup();
+
+    /// TODO: turn into lambda functions when available
     struct init_body {
         internal_array_op2 func;
         const void *arg;
@@ -261,7 +180,7 @@ recover:
         safe_init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}
         void operator()(segment_t &s, void *begin, size_type n) const {
             if( s.array <= internal::vector_allocation_error_flag )
-                throw bad_last_alloc(); // throw custom exception
+                throw_exception(eid_bad_last_alloc); // throw custom exception
             func( begin, arg, n );
         }
     };
@@ -275,6 +194,103 @@ recover:
     };
 };
 
+void concurrent_vector_base_v3::helper::extend_segment_table(concurrent_vector_base_v3 &v, concurrent_vector_base_v3::size_type start) {
+    if( start > segment_size(pointers_per_short_table) ) start = segment_size(pointers_per_short_table);
+    // If other threads are trying to set pointers in the short segment, wait for them to finish their
+    // assigments before we copy the short segment to the long segment. Note: grow_to_at_least depends on it
+    for( segment_index_t i = 0; segment_base(i) < start && v.my_segment == v.my_storage; i++ )
+        if(!v.my_storage[i].array) {
+            ITT_NOTIFY(sync_prepare, &v.my_storage[i].array);
+            atomic_backoff backoff;
+            do backoff.pause(); while( v.my_segment == v.my_storage && !v.my_storage[i].array );
+            ITT_NOTIFY(sync_acquired, &v.my_storage[i].array);
+        }
+    if( v.my_segment != v.my_storage ) return;
+
+    segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_table, sizeof(segment_t), NULL );
+    // No need to check !s here, because NFS_Allocate throws exception if it cannot allocate the requested storage.
+    memset( s, 0, pointers_per_long_table*sizeof(segment_t) );
+    for( segment_index_t i = 0; i < pointers_per_short_table; i++)
+        s[i] = v.my_storage[i];
+    if( v.my_segment.compare_and_swap( s, v.my_storage ) != v.my_storage )
+        NFS_Free( s );
+    // else TODO: add ITT_NOTIFY signals for v.my_segment?
+}
+
+concurrent_vector_base_v3::size_type concurrent_vector_base_v3::helper::enable_segment(concurrent_vector_base_v3 &v, concurrent_vector_base_v3::size_type k, concurrent_vector_base_v3::size_type element_size) {
+    segment_t* s = v.my_segment; // TODO: optimize out as argument? Optimize accesses to my_first_block
+    __TBB_ASSERT( s[k].array <= internal::vector_allocation_error_flag, "concurrent operation during growth?" );
+    if( !k ) {
+        assign_first_segment_if_neccessary(v, default_initial_segments-1);
+        try {
+            publish_segment(s[0], allocate_segment(v, segment_size(v.my_first_block) ) );
+        } catch(...) { // intercept exception here, assign internal::vector_allocation_error_flag value, re-throw exception
+            publish_segment(s[0], internal::vector_allocation_error_flag); throw;
+        }
+        return 2;
+    }
+    size_type m = segment_size(k);
+    if( !v.my_first_block ) // push_back only
+        spin_wait_while_eq( v.my_first_block, segment_index_t(0) );
+    if( k < v.my_first_block ) {
+        // 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 );
+            spin_wait_while_eq( s[0].array, (void*)0 );
+            array0 = __TBB_load_with_acquire(s[0].array);
+        }
+        ITT_NOTIFY(sync_acquired, &s[0].array);
+        if( array0 <= internal::vector_allocation_error_flag ) { // check for internal::vector_allocation_error_flag of initial segment
+            publish_segment(s[k], internal::vector_allocation_error_flag); // and assign internal::vector_allocation_error_flag here
+            throw_exception(eid_bad_last_alloc); // throw custom exception
+        }
+        publish_segment( s[k],
+                static_cast<void*>( static_cast<char*>(array0) + segment_base(k)*element_size )
+        );
+    } else {
+        try {
+            publish_segment(s[k], allocate_segment(v, m));
+        } catch(...) { // intercept exception here, assign internal::vector_allocation_error_flag value, re-throw exception
+            publish_segment(s[k], internal::vector_allocation_error_flag); throw;
+        }
+    }
+    return m;
+}
+
+void concurrent_vector_base_v3::helper::cleanup() {
+    if( !sz ) { // allocation failed, restore the table
+        segment_index_t k_start = k, k_end = segment_index_of(finish-1);
+        if( segment_base( k_start ) < start )
+            get_segment_ptr(k_start++, true); // wait
+        if( k_start < first_block ) {
+            void *array0 = get_segment_ptr(0, start>0); // wait if necessary
+            if( array0 && !k_start ) ++k_start;
+            if( array0 <= internal::vector_allocation_error_flag )
+                for(; k_start < first_block && k_start <= k_end; ++k_start )
+                    publish_segment(table[k_start], internal::vector_allocation_error_flag);
+            else for(; k_start < first_block && k_start <= k_end; ++k_start )
+                    publish_segment(table[k_start], static_cast<void*>(
+                        static_cast<char*>(array0) + segment_base(k_start)*element_size) );
+        }
+        for(; k_start <= k_end; ++k_start ) // not in first block
+            if( !__TBB_load_with_acquire(table[k_start].array) )
+                publish_segment(table[k_start], internal::vector_allocation_error_flag);
+        // fill alocated items
+        first_segment();
+        goto recover;
+    }
+    while( sz <= finish ) { // there is still work for at least one segment
+        next_segment();
+recover:
+        void *array = table[k].array;
+        if( array > internal::vector_allocation_error_flag )
+            std::memset( static_cast<char*>(array)+element_size*start, 0, ((sz<finish?sz:finish) - start)*element_size );
+        else __TBB_ASSERT( array == internal::vector_allocation_error_flag, NULL );
+    }
+}
+
 concurrent_vector_base_v3::~concurrent_vector_base_v3() {
     segment_t* s = my_segment;
     if( s != my_storage ) {
@@ -296,9 +312,9 @@ concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_capacit
 
 void concurrent_vector_base_v3::internal_throw_exception(size_type t) const {
     switch(t) {
-        case 0: throw out_of_range("Index out of requested size range");
-        case 1: throw range_error ("Index out of allocated segment slots");
-        case 2: throw range_error ("Index is not allocated");
+        case 0: throw_exception(eid_out_of_range);
+        case 1: throw_exception(eid_segment_range_error);
+        case 2: throw_exception(eid_index_range_error);
     }
 }
 
@@ -348,7 +364,7 @@ void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3
         size_type new_end = b>=n ? b : n;
         __TBB_ASSERT( my_early_size>new_end, NULL );
         if( my_segment[k].array <= internal::vector_allocation_error_flag) // check vector was broken before
-            throw bad_last_alloc(); // throw custom exception
+            throw_exception(eid_bad_last_alloc); // throw custom exception
         // destructors are supposed to not throw any exceptions
         destroy( (char*)my_segment[k].array+element_size*(new_end-b), my_early_size-new_end );
         my_early_size = new_end;
@@ -366,7 +382,7 @@ void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3
         if( !my_segment[k].array )
             helper::enable_segment(*this, k, element_size);
         else if( my_segment[k].array <= internal::vector_allocation_error_flag )
-            throw bad_last_alloc(); // throw custom exception
+            throw_exception(eid_bad_last_alloc); // throw custom exception
         size_type m = k? segment_size(k) : 2;
         if( m > n-b ) m = n-b;
         size_type a = 0;
@@ -424,7 +440,7 @@ concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_to
             ITT_NOTIFY(sync_acquired, &s.array);
         }
         if( my_segment[i].array <= internal::vector_allocation_error_flag )
-            throw bad_last_alloc();
+            throw_exception(eid_bad_last_alloc);
     }
 #if TBB_USE_DEBUG
     size_type capacity = internal_capacity();
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/src/tbb/critical_section.cpp
similarity index 80%
copy from examples/task/tree_sum/SerialSumTree.cpp
copy to src/tbb/critical_section.cpp
index 2f39bae..c67621f 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/src/tbb/critical_section.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,13 +26,14 @@
     the GNU General Public License.
 */
 
-#include "common.h"
+#include "tbb/critical_section.h"
+#include "itt_notify.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;
+namespace tbb {
+    namespace internal {
+
+void critical_section_v4::internal_construct() {
+    ITT_SYNC_CREATE(&my_impl, _T("ppl::critical_section"), _T(""));
 }
+}  // namespace internal
+}  // namespace tbb
diff --git a/src/tbb/dynamic_link.cpp b/src/tbb/dynamic_link.cpp
index f6de510..a1695a8 100644
--- a/src/tbb/dynamic_link.cpp
+++ b/src/tbb/dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -93,6 +93,7 @@ bool dynamic_link( void* module, const dynamic_link_descriptor descriptors[], si
 }
 
 #endif /* !__TBB_WEAK_SYMBOLS */
+
 bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t n, size_t required, dynamic_link_handle* handle )
 {
 #if _WIN32||_WIN64
diff --git a/src/tbb/dynamic_link.h b/src/tbb/dynamic_link.h
index 1439eca..c7d3d5a 100644
--- a/src/tbb/dynamic_link.h
+++ b/src/tbb/dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/enumerable_thread_specific.cpp b/src/tbb/enumerable_thread_specific.cpp
index f576fb3..8425be6 100644
--- a/src/tbb/enumerable_thread_specific.cpp
+++ b/src/tbb/enumerable_thread_specific.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
index e22bc1c..8c881dc 100644
--- a/src/tbb/ia32-masm/atomic_support.asm
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 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 4f560c4..be1552f 100644
--- a/src/tbb/ia32-masm/lock_byte.asm
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbb/ia64-gas/atomic_support.s b/src/tbb/ia64-gas/atomic_support.s
index 1750289..f7c6835 100644
--- a/src/tbb/ia64-gas/atomic_support.s
+++ b/src/tbb/ia64-gas/atomic_support.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/src/tbb/ia64-gas/ia64_misc.s b/src/tbb/ia64-gas/ia64_misc.s
index 999bfb9..d4233d2 100644
--- a/src/tbb/ia64-gas/ia64_misc.s
+++ b/src/tbb/ia64-gas/ia64_misc.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/src/tbb/ia64-gas/lock_byte.s b/src/tbb/ia64-gas/lock_byte.s
index e7f199d..932bd37 100644
--- a/src/tbb/ia64-gas/lock_byte.s
+++ b/src/tbb/ia64-gas/lock_byte.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/src/tbb/ia64-gas/log2.s b/src/tbb/ia64-gas/log2.s
index 2a42888..ed07b98 100644
--- a/src/tbb/ia64-gas/log2.s
+++ b/src/tbb/ia64-gas/log2.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
diff --git a/src/tbb/ia64-gas/pause.s b/src/tbb/ia64-gas/pause.s
index bead89b..45c2bb7 100644
--- a/src/tbb/ia64-gas/pause.s
+++ b/src/tbb/ia64-gas/pause.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 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 2e052d7..b72fe7a 100644
--- a/src/tbb/ibm_aix51/atomic_support.c
+++ b/src/tbb/ibm_aix51/atomic_support.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/index.html b/src/tbb/index.html
index c927b94..7ac305c 100644
--- a/src/tbb/index.html
+++ b/src/tbb/index.html
@@ -21,7 +21,7 @@ This directory contains the source code of the TBB core components.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2009 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <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/tbb/intel64-masm/atomic_support.asm b/src/tbb/intel64-masm/atomic_support.asm
index 86a2408..0431221 100644
--- a/src/tbb/intel64-masm/atomic_support.asm
+++ b/src/tbb/intel64-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 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 27ebbff..77ac33e 100644
--- a/src/tbb/itt_notify.cpp
+++ b/src/tbb/itt_notify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
index db8aefc..4fff7da 100644
--- a/src/tbb/itt_notify.h
+++ b/src/tbb/itt_notify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -86,8 +86,6 @@ namespace tbb {
             *SyncObj_TaskStealingLoop,
             *SyncObj_WorkerTaskPool,
             *SyncObj_MasterTaskPool,
-            *SyncObj_GateLock,
-            *SyncObj_Gate,
             *SyncObj_SchedulerTermination,
             *SyncObj_ContextsList
             ;
diff --git a/src/tbb/itt_notify_proxy.c b/src/tbb/itt_notify_proxy.c
index 9d4e672..7fdedfa 100644
--- a/src/tbb/itt_notify_proxy.c
+++ b/src/tbb/itt_notify_proxy.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/lin32-tbb-export.def b/src/tbb/lin32-tbb-export.def
index 5fc2f53..ee35e31 100644
--- a/src/tbb/lin32-tbb-export.def
+++ b/src/tbb/lin32-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -71,7 +71,7 @@ _ZTIN3tbb10empty_taskE;
 _ZTSN3tbb10empty_taskE;
 _ZTVN3tbb10empty_taskE;
 
-/* exception handling support */
+/* Exception handling in task scheduler */
 #if __TBB_EXCEPTIONS
 _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEj;
 _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
@@ -99,13 +99,35 @@ _ZN3tbb13tbb_exceptionD2Ev;
 _ZTIN3tbb13tbb_exceptionE;
 _ZTSN3tbb13tbb_exceptionE;
 _ZTVN3tbb13tbb_exceptionE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* Symbols for exceptions thrown from TBB */
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
 _ZN3tbb14bad_last_allocD0Ev;
 _ZN3tbb14bad_last_allocD1Ev;
 _ZNK3tbb14bad_last_alloc4whatEv;
 _ZTIN3tbb14bad_last_allocE;
 _ZTSN3tbb14bad_last_allocE;
 _ZTVN3tbb14bad_last_allocE;
-#endif /* __TBB_EXCEPTIONS */
+_ZN3tbb12missing_waitD0Ev;
+_ZN3tbb12missing_waitD1Ev;
+_ZNK3tbb12missing_wait4whatEv;
+_ZTIN3tbb12missing_waitE;
+_ZTSN3tbb12missing_waitE;
+_ZTVN3tbb12missing_waitE;
+_ZN3tbb27invalid_multiple_schedulingD0Ev;
+_ZN3tbb27invalid_multiple_schedulingD1Ev;
+_ZNK3tbb27invalid_multiple_scheduling4whatEv;
+_ZTIN3tbb27invalid_multiple_schedulingE;
+_ZTSN3tbb27invalid_multiple_schedulingE;
+_ZTVN3tbb27invalid_multiple_schedulingE;
+_ZN3tbb13improper_lockD0Ev;
+_ZN3tbb13improper_lockD1Ev;
+_ZNK3tbb13improper_lock4whatEv;
+_ZTIN3tbb13improper_lockE;
+_ZTSN3tbb13improper_lockE;
+_ZTVN3tbb13improper_lockE;
 
 /* tbb_misc.cpp */
 _ZN3tbb17assertion_failureEPKciS1_S1_;
@@ -116,7 +138,6 @@ _ZN3tbb8internal15runtime_warningEPKcz;
 __TBB_machine_store8_slow_perf_warning;
 __TBB_machine_store8_slow;
 TBB_runtime_interface_version;
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
 
 /* itt_notify.cpp */
 _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
@@ -206,6 +227,9 @@ _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
 _ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
 _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
 
+/* critical_section.cpp */
+_ZN3tbb8internal19critical_section_v418internal_constructEv;
+
 #if !TBB_NO_LEGACY
 /* concurrent_hash_map */
 _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
diff --git a/src/tbb/lin64-tbb-export.def b/src/tbb/lin64-tbb-export.def
index 40b245b..992cf6e 100644
--- a/src/tbb/lin64-tbb-export.def
+++ b/src/tbb/lin64-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -71,7 +71,7 @@ _ZTIN3tbb10empty_taskE;
 _ZTSN3tbb10empty_taskE;
 _ZTVN3tbb10empty_taskE;
 
-/* exception handling support */
+/* Exception handling in task scheduler */
 #if __TBB_EXCEPTIONS
 _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
 _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
@@ -99,13 +99,35 @@ _ZN3tbb13tbb_exceptionD2Ev;
 _ZTIN3tbb13tbb_exceptionE;
 _ZTSN3tbb13tbb_exceptionE;
 _ZTVN3tbb13tbb_exceptionE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* Symbols for exceptions thrown from TBB */
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
 _ZN3tbb14bad_last_allocD0Ev;
 _ZN3tbb14bad_last_allocD1Ev;
 _ZNK3tbb14bad_last_alloc4whatEv;
 _ZTIN3tbb14bad_last_allocE;
 _ZTSN3tbb14bad_last_allocE;
 _ZTVN3tbb14bad_last_allocE;
-#endif /* __TBB_EXCEPTIONS */
+_ZN3tbb12missing_waitD0Ev;
+_ZN3tbb12missing_waitD1Ev;
+_ZNK3tbb12missing_wait4whatEv;
+_ZTIN3tbb12missing_waitE;
+_ZTSN3tbb12missing_waitE;
+_ZTVN3tbb12missing_waitE;
+_ZN3tbb27invalid_multiple_schedulingD0Ev;
+_ZN3tbb27invalid_multiple_schedulingD1Ev;
+_ZNK3tbb27invalid_multiple_scheduling4whatEv;
+_ZTIN3tbb27invalid_multiple_schedulingE;
+_ZTSN3tbb27invalid_multiple_schedulingE;
+_ZTVN3tbb27invalid_multiple_schedulingE;
+_ZN3tbb13improper_lockD0Ev;
+_ZN3tbb13improper_lockD1Ev;
+_ZNK3tbb13improper_lock4whatEv;
+_ZTIN3tbb13improper_lockE;
+_ZTSN3tbb13improper_lockE;
+_ZTVN3tbb13improper_lockE;
 
 /* tbb_misc.cpp */
 _ZN3tbb17assertion_failureEPKciS1_S1_;
@@ -114,7 +136,6 @@ _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
 _ZN3tbb8internal13handle_perrorEiPKc;
 _ZN3tbb8internal15runtime_warningEPKcz;
 TBB_runtime_interface_version;
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
 
 /* itt_notify.cpp */
 _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
@@ -204,6 +225,9 @@ _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
 _ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
 _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
 
+/* critical_section.cpp */
+_ZN3tbb8internal19critical_section_v418internal_constructEv;
+
 #if !TBB_NO_LEGACY
 /* concurrent_hash_map */
 _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
diff --git a/src/tbb/lin64ipf-tbb-export.def b/src/tbb/lin64ipf-tbb-export.def
index 22514d8..b9d4f86 100644
--- a/src/tbb/lin64ipf-tbb-export.def
+++ b/src/tbb/lin64ipf-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -71,7 +71,7 @@ _ZTIN3tbb10empty_taskE;
 _ZTSN3tbb10empty_taskE;
 _ZTVN3tbb10empty_taskE;
 
-/* exception handling support */
+/* Exception handling in task scheduler */
 #if __TBB_EXCEPTIONS
 _ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
 _ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
@@ -99,13 +99,35 @@ _ZN3tbb13tbb_exceptionD2Ev;
 _ZTIN3tbb13tbb_exceptionE;
 _ZTSN3tbb13tbb_exceptionE;
 _ZTVN3tbb13tbb_exceptionE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* Symbols for exceptions thrown from TBB */
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+_ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE;
 _ZN3tbb14bad_last_allocD0Ev;
 _ZN3tbb14bad_last_allocD1Ev;
 _ZNK3tbb14bad_last_alloc4whatEv;
 _ZTIN3tbb14bad_last_allocE;
 _ZTSN3tbb14bad_last_allocE;
 _ZTVN3tbb14bad_last_allocE;
-#endif /* __TBB_EXCEPTIONS */
+_ZN3tbb12missing_waitD0Ev;
+_ZN3tbb12missing_waitD1Ev;
+_ZNK3tbb12missing_wait4whatEv;
+_ZTIN3tbb12missing_waitE;
+_ZTSN3tbb12missing_waitE;
+_ZTVN3tbb12missing_waitE;
+_ZN3tbb27invalid_multiple_schedulingD0Ev;
+_ZN3tbb27invalid_multiple_schedulingD1Ev;
+_ZNK3tbb27invalid_multiple_scheduling4whatEv;
+_ZTIN3tbb27invalid_multiple_schedulingE;
+_ZTSN3tbb27invalid_multiple_schedulingE;
+_ZTVN3tbb27invalid_multiple_schedulingE;
+_ZN3tbb13improper_lockD0Ev;
+_ZN3tbb13improper_lockD1Ev;
+_ZNK3tbb13improper_lock4whatEv;
+_ZTIN3tbb13improper_lockE;
+_ZTSN3tbb13improper_lockE;
+_ZTVN3tbb13improper_lockE;
 
 /* tbb_misc.cpp */
 _ZN3tbb17assertion_failureEPKciS1_S1_;
@@ -114,7 +136,6 @@ _ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
 _ZN3tbb8internal13handle_perrorEiPKc;
 _ZN3tbb8internal15runtime_warningEPKcz;
 TBB_runtime_interface_version;
-_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
 
 /* itt_notify.cpp */
 _ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
@@ -204,6 +225,9 @@ _ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
 _ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
 _ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
 
+/* critical_section.cpp */
+_ZN3tbb8internal19critical_section_v418internal_constructEv;
+
 #if !TBB_NO_LEGACY
 /* concurrent_hash_map */
 _ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
diff --git a/src/tbb/mac32-tbb-export.def b/src/tbb/mac32-tbb-export.def
index 9366805..9fa4c1d 100644
--- a/src/tbb/mac32-tbb-export.def
+++ b/src/tbb/mac32-tbb-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -65,7 +65,7 @@ __ZTIN3tbb10empty_taskE
 __ZTSN3tbb10empty_taskE
 __ZTVN3tbb10empty_taskE
 
-# exception handling support
+# Exception handling in task scheduler
 __ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
 __ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
 __ZNK3tbb18task_group_context28is_group_execution_cancelledEv
@@ -91,33 +91,57 @@ __ZTVN3tbb18captured_exceptionE
 __ZTIN3tbb13tbb_exceptionE
 __ZTSN3tbb13tbb_exceptionE
 __ZTVN3tbb13tbb_exceptionE
-__ZN3tbb14bad_last_allocD0Ev
-__ZN3tbb14bad_last_allocD1Ev
-__ZNK3tbb14bad_last_alloc4whatEv
-__ZTIN3tbb14bad_last_allocE
-__ZTSN3tbb14bad_last_allocE
-__ZTVN3tbb14bad_last_allocE
 
-# Symbols for std exception classes thrown from TBB
+# Symbols for exceptions thrown from TBB
+__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
+__ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE
+__ZNSt16invalid_argumentD1Ev
+__ZTISt16invalid_argument
+__ZTSSt16invalid_argument
 __ZNSt11range_errorD1Ev
-__ZNSt12length_errorD1Ev
-__ZNSt12out_of_rangeD1Ev
 __ZTISt11range_error
-__ZTISt12length_error
-__ZTISt12out_of_range
 __ZTSSt11range_error
+__ZNSt12length_errorD1Ev
+__ZTISt12length_error
 __ZTSSt12length_error
+__ZNSt12out_of_rangeD1Ev
+__ZTISt12out_of_range
 __ZTSSt12out_of_range
+__ZN3tbb14bad_last_allocD0Ev
+__ZN3tbb14bad_last_allocD1Ev
+__ZNK3tbb14bad_last_alloc4whatEv
+__ZTIN3tbb14bad_last_allocE
+__ZTSN3tbb14bad_last_allocE
+__ZTVN3tbb14bad_last_allocE
+__ZN3tbb12missing_waitD0Ev
+__ZN3tbb12missing_waitD1Ev
+__ZNK3tbb12missing_wait4whatEv
+__ZTIN3tbb12missing_waitE
+__ZTSN3tbb12missing_waitE
+__ZTVN3tbb12missing_waitE
+__ZN3tbb27invalid_multiple_schedulingD0Ev
+__ZN3tbb27invalid_multiple_schedulingD1Ev
+__ZNK3tbb27invalid_multiple_scheduling4whatEv
+__ZTIN3tbb27invalid_multiple_schedulingE
+__ZTSN3tbb27invalid_multiple_schedulingE
+__ZTVN3tbb27invalid_multiple_schedulingE
+__ZN3tbb13improper_lockD0Ev
+__ZN3tbb13improper_lockD1Ev
+__ZNK3tbb13improper_lock4whatEv
+__ZTIN3tbb13improper_lockE
+__ZTSN3tbb13improper_lockE
+__ZTVN3tbb13improper_lockE
 
 # tbb_misc.cpp
 __ZN3tbb17assertion_failureEPKciS1_S1_
 __ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
 __ZN3tbb8internal13handle_perrorEiPKc
 __ZN3tbb8internal15runtime_warningEPKcz
+#ifndef __POWERPC__
 ___TBB_machine_store8_slow_perf_warning
 ___TBB_machine_store8_slow
+#endif
 _TBB_runtime_interface_version
-__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
 
 # itt_notify.cpp
 __ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
@@ -205,6 +229,9 @@ __ZN3tbb13queuing_mutex11scoped_lock7releaseEv
 __ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
 __ZN3tbb13queuing_mutex18internal_constructEv
 
+# critical_section.cpp
+__ZN3tbb8internal19critical_section_v418internal_constructEv
+
 #if !TBB_NO_LEGACY
 # concurrent_hash_map
 __ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
diff --git a/src/tbb/mac64-tbb-export.def b/src/tbb/mac64-tbb-export.def
index c91c8ce..d5517d3 100644
--- a/src/tbb/mac64-tbb-export.def
+++ b/src/tbb/mac64-tbb-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -65,7 +65,7 @@ __ZTIN3tbb10empty_taskE
 __ZTSN3tbb10empty_taskE
 __ZTVN3tbb10empty_taskE
 
-# exception handling support
+# Exception handling in task scheduler
 __ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
 __ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
 __ZNK3tbb18task_group_context28is_group_execution_cancelledEv
@@ -91,30 +91,52 @@ __ZTVN3tbb18captured_exceptionE
 __ZTIN3tbb13tbb_exceptionE
 __ZTSN3tbb13tbb_exceptionE
 __ZTVN3tbb13tbb_exceptionE
-__ZN3tbb14bad_last_allocD0Ev
-__ZN3tbb14bad_last_allocD1Ev
-__ZNK3tbb14bad_last_alloc4whatEv
-__ZTIN3tbb14bad_last_allocE
-__ZTSN3tbb14bad_last_allocE
-__ZTVN3tbb14bad_last_allocE
 
-# Symbols for std exception classes thrown from TBB
+# Symbols for exceptions thrown from TBB
+__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
+__ZN3tbb8internal18throw_exception_v4ENS0_12exception_idE
+__ZNSt16invalid_argumentD1Ev
+__ZTISt16invalid_argument
+__ZTSSt16invalid_argument
 __ZNSt11range_errorD1Ev
-__ZNSt12length_errorD1Ev
-__ZNSt12out_of_rangeD1Ev
 __ZTISt11range_error
-__ZTISt12length_error
-__ZTISt12out_of_range
 __ZTSSt11range_error
+__ZNSt12length_errorD1Ev
+__ZTISt12length_error
 __ZTSSt12length_error
+__ZNSt12out_of_rangeD1Ev
+__ZTISt12out_of_range
 __ZTSSt12out_of_range
+__ZN3tbb14bad_last_allocD0Ev
+__ZN3tbb14bad_last_allocD1Ev
+__ZNK3tbb14bad_last_alloc4whatEv
+__ZTIN3tbb14bad_last_allocE
+__ZTSN3tbb14bad_last_allocE
+__ZTVN3tbb14bad_last_allocE
+__ZN3tbb12missing_waitD0Ev
+__ZN3tbb12missing_waitD1Ev
+__ZNK3tbb12missing_wait4whatEv
+__ZTIN3tbb12missing_waitE
+__ZTSN3tbb12missing_waitE
+__ZTVN3tbb12missing_waitE
+__ZN3tbb27invalid_multiple_schedulingD0Ev
+__ZN3tbb27invalid_multiple_schedulingD1Ev
+__ZNK3tbb27invalid_multiple_scheduling4whatEv
+__ZTIN3tbb27invalid_multiple_schedulingE
+__ZTSN3tbb27invalid_multiple_schedulingE
+__ZTVN3tbb27invalid_multiple_schedulingE
+__ZN3tbb13improper_lockD0Ev
+__ZN3tbb13improper_lockD1Ev
+__ZNK3tbb13improper_lock4whatEv
+__ZTIN3tbb13improper_lockE
+__ZTSN3tbb13improper_lockE
+__ZTVN3tbb13improper_lockE
 
 # tbb_misc.cpp
 __ZN3tbb17assertion_failureEPKciS1_S1_
 __ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
 __ZN3tbb8internal13handle_perrorEiPKc
 __ZN3tbb8internal15runtime_warningEPKcz
-__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
 _TBB_runtime_interface_version
 
 # itt_notify.cpp
@@ -203,6 +225,9 @@ __ZN3tbb13queuing_mutex11scoped_lock7releaseEv
 __ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
 __ZN3tbb13queuing_mutex18internal_constructEv
 
+# critical_section.cpp
+__ZN3tbb8internal19critical_section_v418internal_constructEv
+
 #if !TBB_NO_LEGACY
 # concurrent_hash_map
 __ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
index 3c619b6..7ade57e 100644
--- a/src/tbb/mutex.cpp
+++ b/src/tbb/mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/pipeline.cpp b/src/tbb/pipeline.cpp
index 822609b..c098286 100644
--- a/src/tbb/pipeline.cpp
+++ b/src/tbb/pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -133,7 +133,7 @@ public:
                 if( token-low_token>=array_size ) 
                     grow( token-low_token+1 );
                 ITT_NOTIFY( sync_releasing, this );
-                putter.put_task_info(array[token&array_size-1]);
+                putter.put_task_info(array[token&(array_size-1)]);
                 return true;
             }
         }
@@ -151,7 +151,7 @@ public:
             spin_mutex::scoped_lock lock( array_mutex );
             if( !is_ordered || token==low_token ) {
                 // Wake the next task
-                task_info& item = array[++low_token & array_size-1];
+                task_info& item = array[++low_token & (array_size-1)];
                 ITT_NOTIFY( sync_acquired, this );
                 wakee = item;
                 item.is_valid = false;
@@ -166,7 +166,7 @@ public:
     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];
+            task_info& temp = array[t&(array_size-1)];
             if (temp.is_valid ) {
                 my_filter->finalize(temp.my_object);
                 temp.is_valid = false;
@@ -177,7 +177,7 @@ public:
 
     bool return_item(task_info& info, bool advance) {
         spin_mutex::scoped_lock lock( array_mutex );
-        task_info& item = array[low_token&array_size-1];
+        task_info& item = array[low_token&(array_size-1)];
         ITT_NOTIFY( sync_acquired, this );
         if( item.is_valid ) {
             info = item;
@@ -204,7 +204,7 @@ public:
         if( token-low_token>=array_size ) 
             grow( token-low_token+1 );
         ITT_NOTIFY( sync_releasing, this );
-        array[token&array_size-1] = info;
+        array[token&(array_size-1)] = info;
     }
 };
 
@@ -219,7 +219,7 @@ void input_buffer::grow( size_type minimum_size ) {
         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];
+        new_array[t&(new_size-1)] = old_array[t&(old_size-1)];
     array = new_array;
     array_size = new_size;
     if( old_array )
diff --git a/src/tbb/private_server.cpp b/src/tbb/private_server.cpp
index 99234ea..7c4cf99 100644
--- a/src/tbb/private_server.cpp
+++ b/src/tbb/private_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
index db2b986..4edf371 100644
--- a/src/tbb/queuing_mutex.cpp
+++ b/src/tbb/queuing_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
index 4c70347..96f213e 100644
--- a/src/tbb/queuing_rw_mutex.cpp
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/recursive_mutex.cpp b/src/tbb/recursive_mutex.cpp
index 95e6290..7083020 100644
--- a/src/tbb/recursive_mutex.cpp
+++ b/src/tbb/recursive_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/spin_mutex.cpp b/src/tbb/spin_mutex.cpp
index e233ffb..d5b11af 100644
--- a/src/tbb/spin_mutex.cpp
+++ b/src/tbb/spin_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/spin_rw_mutex.cpp b/src/tbb/spin_rw_mutex.cpp
index b3ce9d8..f4f09da 100644
--- a/src/tbb/spin_rw_mutex.cpp
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index 8570522..7be3b13 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,14 +35,11 @@
 
     // Some pthreads documentation says that <pthread.h> must be first header.
     #include <pthread.h>
-    #define __TBB_THREAD_ROUTINE 
 
 #elif USE_WINTHREAD
 
     #include <windows.h>
-    #include <process.h>        /* Need _beginthreadex from there */
     #include <malloc.h>         /* Need _alloca from there */
-    #define __TBB_THREAD_ROUTINE WINAPI
 
 #else
 
@@ -166,8 +163,6 @@ using namespace std;
             *SyncObj_TaskPoolSpinning = _T("TBB Scheduler"),
             *SyncObj_Mailbox = _T("TBB Scheduler"),
             *SyncObj_TaskReturnList = _T("TBB Scheduler"),
-            *SyncObj_GateLock = _T("TBB Scheduler"),
-            *SyncObj_Gate = _T("TBB Scheduler"),
             *SyncObj_ContextsList = _T("TBB Scheduler")
             ;
 #endif /* DO_ITT_NOTIFY */
@@ -183,19 +178,11 @@ const stack_size_type ThreadStackSize = 2*MByte;
 const stack_size_type ThreadStackSize = 4*MByte;
 #endif
 
-#if USE_PTHREAD
-typedef void* thread_routine_return_type;
-#else
-typedef unsigned thread_routine_return_type;
-#endif
-
 //------------------------------------------------------------------------
 // General utility section
 //------------------------------------------------------------------------
 
-#if TBB_USE_ASSERT
-    #define __TBB_POISON_DEQUE 1
-#endif /* TBB_USE_ASSERT */
+#define __TBB_POISON_DEQUE TBB_USE_ASSERT
 
 #if __TBB_POISON_DEQUE
     #if __ia64__
@@ -328,9 +315,8 @@ protected:
     //! Pointer to first task_proxy in mailbox, or NULL if box is empty. 
     task_proxy* my_first;
 
-    //! Pointer to last task_proxy in mailbox, or NULL if box is empty. 
-    /** Low-order bit set to 1 to represent lock on the box. */
-    task_proxy* my_last;
+    //! Pointer to pointer that will point to next item in the queue.  Never NULL.
+    task_proxy** my_last;
 
     //! Owner of mailbox is not executing a task, and has drained its own task pool.
     bool my_is_idle;
@@ -341,64 +327,59 @@ protected:
 class mail_outbox: unpadded_mail_outbox {
     char pad[NFS_MaxLineSize-sizeof(unpadded_mail_outbox)];
 
-    //! Acquire lock on the box.
-    task_proxy* acquire() {
-        atomic_backoff backoff;
-        for(;;) {
-            // No fence on load, because subsequent compare-and-swap has the necessary fence.
-            intptr last = (intptr)my_last;
-            if( (last&1)==0 && __TBB_CompareAndSwapW(&my_last,last|1,last)==last) {
-                __TBB_ASSERT( (my_first==NULL)==((intptr(my_last)&~1)==0), NULL );
-                return (task_proxy*)last;
-            }
-            backoff.pause();
-        }
-    }
     task_proxy* internal_pop() {
         //! No fence on load of my_first, because if it is NULL, there's nothing further to read from another thread.
-        task_proxy* result = my_first;
-        if( result ) {
-            if( task_proxy* f = __TBB_load_with_acquire(result->next_in_mailbox) ) {
-                // No lock required
-                __TBB_store_with_release( my_first, f );
+        task_proxy* first = my_first;
+        if( first ) {
+            // There is a first item in the mailbox.  See if there is a second.
+            if( task_proxy* second = __TBB_load_with_acquire(first->next_in_mailbox) ) {
+                // There are at least two items, so first item can be popped easily.
+                __TBB_store_with_release( my_first, second );
             } else {
-                // acquire() has the necessary fence.
-                task_proxy* l = acquire();
-                __TBB_ASSERT(result==my_first,NULL); 
-                if( !(my_first = result->next_in_mailbox) ) 
-                    l=0;
-                __TBB_store_with_release( my_last, l );
+                // There is only one item.  Some care is required to pop it.
+                my_first = NULL;
+                if( (task_proxy**)__TBB_CompareAndSwapW(&my_last, (intptr)&my_first,
+                    (intptr)&first->next_in_mailbox)==&first->next_in_mailbox ) 
+                {
+                    // Successfully transitioned mailbox from having one item to having none.
+                    __TBB_ASSERT(!first->next_in_mailbox,NULL);
+                } else {
+                    // Some other thread updated my_last but has not filled in result->next_in_mailbox
+                    // Wait until first item points to second item.
+                    atomic_backoff backoff;
+                    while( !(second=const_cast<volatile task_proxy*>(first)->next_in_mailbox) ) 
+                        backoff.pause();
+                    my_first = second;
+                } 
             }
         }
-        return result;
+        return first;
     }
 public:
     friend class mail_inbox;
 
     //! Push task_proxy onto the mailbox queue of another thread.
+    /** Implementation is wait-free. */
     void push( task_proxy& t ) {
-        __TBB_ASSERT(&t!=NULL, NULL);
+        __TBB_ASSERT(&t, NULL);
         t.next_in_mailbox = NULL; 
-        if( task_proxy* l = acquire() ) {
-            l->next_in_mailbox = &t;
-        } else {
-            my_first=&t;
-        }
-        // Fence required because caller is sending the task_proxy to another thread.
-        __TBB_store_with_release( my_last, &t );
+        task_proxy** link = (task_proxy**)__TBB_FetchAndStoreW(&my_last,(intptr)&t.next_in_mailbox);
+        // No release fence required for the next store, because there are no memory operations 
+        // between the previous fully fenced atomic operation and the store.
+        *link = &t;
     }
-#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
-        brevity and speed, we depend upon a memset to initialize instances of this class */
-    void assert_is_initialized() const {
+
+    //! Construct *this as a mailbox from zeroed memory.
+    /** Raise assertion if *this is not previously zeored, or sizeof(this) is wrong.
+        This method is provided instead of a full constructor since we know the objecxt
+        will be constructed in zeroed memory. */
+    void construct() {
         __TBB_ASSERT( sizeof(*this)==NFS_MaxLineSize, NULL );
         __TBB_ASSERT( !my_first, NULL );
         __TBB_ASSERT( !my_last, NULL );
         __TBB_ASSERT( !my_is_idle, NULL );
+        my_last=&my_first;
     }
-#endif /* TBB_USE_ASSERT */
 
     //! Drain the mailbox 
     intptr drain() {
@@ -1205,8 +1186,6 @@ scheduler::~scheduler( ) {}
     #define EmptyTaskPool ((task**)0u)
     #define LockedTaskPool ((task**)~0u)
 
-    #define LocalSpawn local_spawn
-
 //! Cilk-style task scheduler.
 /** None of the fields here are every read or written by threads other than
     the thread that creates the instance.
@@ -1237,18 +1216,20 @@ class GenericScheduler: public scheduler
 
     //! Definitions for bits in task_prefix::extra_state
     enum internal_state_t {
-        //! Tag for TBB <3.0 tasks.
-        es_version_2_task = 0,
-        //! Tag for TBB 3.0 tasks.
+        //! Tag for v1 tasks (i.e. tasks in TBB 1.0 and 2.0)
+        es_version_1_task = 0,
+        //! Tag for v3 tasks (i.e. tasks in TBB 2.1-2.2)
         es_version_3_task = 1,
-        //! Tag for TBB 3.0 task_proxy.
-        es_task_proxy = 2,
+        //! Tag for v3 task_proxy.
+        es_task_proxy = 0x20,
         //! Set if ref_count might be changed by another thread.  Used for debugging.
-        es_ref_count_active = 0x40
+        es_ref_count_active = 0x40,
+        //! Set if the task has been stolen
+        es_task_is_stolen = 0x80
     };
     
     static bool is_version_3_task( task& t ) {
-        return (t.prefix().extra_state & 0x3F)==0x1;
+        return (t.prefix().extra_state & 0x0F)>=0x1;
     }
 
     //! Position in the call stack specifying its maximal filling when stealing is still allowed
@@ -1455,11 +1436,6 @@ class GenericScheduler: public scheduler
     //! Initialize a scheduler for a worker thread.
     static GenericScheduler* create_worker( Arena& a, size_t index );
 
-
-    //! Top-level routine for worker threads
-    /** Argument arg is a WorkerDescriptor*, cast to a (void*). */
-    static thread_routine_return_type __TBB_THREAD_ROUTINE worker_routine( void* arg );
-
     //! Perform necessary cleanup when a worker thread finishes.
     static void cleanup_worker( void* arg );
 
@@ -1485,6 +1461,8 @@ public:
         Governor::local_scheduler()->local_spawn_root_and_wait( first, next );
     }
 
+    virtual void local_wait_for_all( task& parent, task* child ) = 0;
+
     //! Allocate and construct a scheduler object.
     static GenericScheduler* allocate_scheduler( Arena* arena );
 
@@ -1563,6 +1541,10 @@ public:
     //! List of small tasks that have been returned to this scheduler by other schedulers.
     task* return_list;
 
+    //! Try getting a task from the mailbox or stealing from another scheduler.
+    /** Redirects to a customization. */
+    virtual task* receive_or_steal_task( reference_count&, bool ) = 0; 
+
     //! Free a small task t that that was allocated by a different scheduler 
     void free_nonlocal_small_task( task& t ); 
 
@@ -1721,7 +1703,7 @@ inline task& GenericScheduler::allocate_task( size_t number_of_bytes,
     // Assign some not outrageously out-of-place value for a while
     p.depth = 0;
     p.parent = parent;
-    // In TBB 3.0 and later, the constructor for task sets extra_state to indicate the version of the tbb/task.h header.
+    // In TBB 2.1 and later, the constructor for task sets extra_state to indicate the version of the tbb/task.h header.
     // In TBB 2.0 and earlier, the constructor leaves extra_state as zero.
     p.extra_state = 0;
     p.affinity = 0;
@@ -1784,18 +1766,22 @@ void GenericScheduler::free_nonlocal_small_task( task& t ) {
 /** The customization can use SchedulerTraits to make decisions without needing a run-time check. */
 template<typename SchedulerTraits>
 class CustomScheduler: private GenericScheduler {
+    typedef CustomScheduler<SchedulerTraits> scheduler_type;
+
     //! Scheduler loop that dispatches tasks.
     /** If child is non-NULL, it is dispatched first.
         Then, until "parent" has a reference count of 1, other task are dispatched or stolen. */
+    /*override*/
     void local_wait_for_all( task& parent, task* child );
 
+    //! Entry point from client code to the scheduler loop that dispatches tasks. 
+    /** The method is virtual, but the *this object is used only for sake of dispatching on the correct vtable,
+        not necessarily the correct *this object.  The correct *this object is looked up in TLS. */
     /*override*/
     void wait_for_all( task& parent, task* child ) {
-        static_cast<CustomScheduler*>(Governor::local_scheduler())->local_wait_for_all( parent, child );
+        static_cast<CustomScheduler*>(Governor::local_scheduler())->scheduler_type::local_wait_for_all( parent, child );
     }
 
-    typedef CustomScheduler<SchedulerTraits> scheduler_type;
-
     //! Construct a CustomScheduler
     CustomScheduler( Arena* arena ) : GenericScheduler(arena) {}
 
@@ -1825,6 +1811,10 @@ public:
         ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);
         return s;
     }
+
+    //! Try getting a task from the mailbox or stealing from another scheduler.
+    /** Returns the stolen task or NULL if all attempts fail. */
+    /* override */ task* receive_or_steal_task( reference_count&, bool );
 };
 
 //------------------------------------------------------------------------
@@ -1861,12 +1851,9 @@ 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_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_USE_ASSERT */
+    // Construct mailboxes.
+    for( unsigned j=1; j<=number_of_slots; ++j ) 
+        a->mailbox(j).construct();
 
     a->prefix().stack_size = stack_size;
     size_t k;
@@ -2527,9 +2514,9 @@ void GenericScheduler::local_spawn_root_and_wait( task& first, task*& next ) {
     }
     dummy.prefix().ref_count = n+1;
     if( n>1 )
-        LocalSpawn( *first.prefix().next, next );
+        local_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 );
+    local_wait_for_all( dummy, &first );
     TBB_TRACE(("spawn_root_and_wait((task_list*)%p): return\n",&first));
 }
 
@@ -2662,6 +2649,99 @@ retry:
     return result;
 }
 
+template<typename SchedulerTraits>
+task* CustomScheduler<SchedulerTraits>::receive_or_steal_task( reference_count& completion_ref_count,
+                                                               bool return_if_no_work ) {
+    task* t = NULL;
+    inbox.set_is_idle( true );
+    // 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) {
+        if( completion_ref_count==1 ) {
+            if( SchedulerTraits::itt_possible ) {
+                if( failure_count!=-1 ) {
+                    ITT_NOTIFY(sync_prepare, &completion_ref_count);
+                    // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+                    ITT_NOTIFY(sync_acquired, this);
+                }
+                ITT_NOTIFY(sync_acquired, &completion_ref_count);
+            }
+            inbox.set_is_idle( false );
+            return NULL;
+        }
+        size_t n = arena->prefix().limit;
+        if( n>1 ) {
+            if( my_affinity_id && (t=get_mailbox_task()) ) {
+                GATHER_STATISTIC( ++mail_received_count );
+            } else {
+                // Try to steal a task from a random victim.
+                if ( !can_steal() )
+                    goto fail;
+                size_t k = random.get() % (n-1);
+                ArenaSlot* victim = &arena->slot[k];
+                // The following condition excludes the master that might have 
+                // already taken our previous place in the arena from the list .
+                // of potential victims. But since such a situation can take 
+                // place only in case of significant oversubscription, keeping
+                // the checks simple seems to be preferable to complicating the code.
+                if( k >= arena_index )
+                    ++victim;               // Adjusts random distribution to exclude self
+                t = steal_task( *victim );
+                if( !t ) goto fail;
+                if( is_proxy(*t) ) {
+                    t = strip_proxy((task_proxy*)t);
+                    if( !t ) goto fail;
+                    GATHER_STATISTIC( ++proxy_steal_count );
+                }
+                t->prefix().extra_state |= es_task_is_stolen;
+                if( is_version_3_task(*t) ) {
+                    innermost_running_task = t;
+                    t->note_affinity( my_affinity_id );
+                }
+                GATHER_STATISTIC( ++steal_count );
+            }
+            __TBB_ASSERT(t,NULL);
+#if __TBB_SCHEDULER_OBSERVER
+            // No memory fence required for read of global_last_observer_proxy, because prior fence on steal/mailbox suffices.
+            if( local_last_observer_proxy!=global_last_observer_proxy ) {
+                notify_entry_observers();
+            }
+#endif /* __TBB_SCHEDULER_OBSERVER */
+            if( SchedulerTraits::itt_possible ) {
+                if( failure_count!=-1 ) {
+                    // FIXME - might be victim, or might be selected from a mailbox
+                    // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+                    ITT_NOTIFY(sync_acquired, this);
+                }
+            }
+            inbox.set_is_idle( false );
+            break; // jumps to: return t;
+        }
+fail:
+        if( SchedulerTraits::itt_possible && failure_count==-1 ) {
+            // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that
+            // the thread has started spinning.  Ideally, we would do this notification
+            // *before* the first failed attempt to steal, but at that point we do not
+            // know that the steal will fail.
+            ITT_NOTIFY(sync_prepare, this);
+            failure_count = 0;
+        }
+        // Pause, even if we are going to yield, because the yield might return immediately.
+        __TBB_Pause(PauseTime);
+        int yield_threshold = 2*int(n);
+        if( failure_count>=yield_threshold ) {
+            __TBB_Yield();
+            if( failure_count>=yield_threshold+100 ) {
+                // When a worker thread has nothing to do, return it to RML.
+                // For purposes of affinity support, the thread is considered idle while in RML.
+                if( return_if_no_work && arena->check_if_pool_is_empty() )
+                    return NULL;
+                failure_count = yield_threshold;
+            }
+        }
+    }
+    return t;
+}
 
 #define ConcurrentWaitsEnabled(t) (t.prefix().context->my_version_and_traits & task_group_context::concurrent_wait)
 #define CancellationInfoPresent(t) (t->prefix().context->my_cancellation_requested)
@@ -2772,6 +2852,7 @@ exception_was_caught:
                                 "if task::execute() returns task, it must be marked as allocated" );
                     // The store here has a subtle secondary effect - it fetches *t_next into cache.
                     t_next->prefix().owner = this;
+                    t_next->prefix().extra_state &= ~es_task_is_stolen;
                 }
                 __TBB_ASSERT(assert_okay(),NULL);
                 switch( task::state_type(t->prefix().state) ) {
@@ -2792,7 +2873,7 @@ exception_was_caught:
                                 if( !t_next ) {
                                     t_next = s;
                                 } else {
-                                    LocalSpawn( *s, s->prefix().next );
+                                    local_spawn( *s, s->prefix().next );
                                     __TBB_ASSERT(assert_okay(),NULL);
                                 }
                             }
@@ -2803,6 +2884,7 @@ exception_was_caught:
 
                     case task::recycle: { // state set by recycle_as_safe_continuation()
                         t->prefix().state = task::allocated;
+                        t->prefix().extra_state &= ~es_task_is_stolen;
                         // for safe continuation, need atomically decrement ref_count;
                         // the block was copied from above case task::executing, and changed.
                         // Use "s" here as name for t, so that code resembles case task::executing more closely.
@@ -2816,7 +2898,7 @@ exception_was_caught:
                             if( !t_next ) {
                                 t_next = s;
                             } else {
-                                LocalSpawn( *s, s->prefix().next );
+                                local_spawn( *s, s->prefix().next );
                                 __TBB_ASSERT(assert_okay(),NULL);
                             }
                         }
@@ -2827,12 +2909,14 @@ exception_was_caught:
                         __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;
-                        LocalSpawn( *t, t->prefix().next );
+                        t->prefix().extra_state &= ~es_task_is_stolen;
+                        local_spawn( *t, t->prefix().next );
                         __TBB_ASSERT(assert_okay(),NULL);
                         break;
-#if TBB_USE_ASSERT
                     case task::allocated:
+                        t->prefix().extra_state &= ~es_task_is_stolen;
                         break;
+#if TBB_USE_ASSERT
                     case task::ready:
                         __TBB_ASSERT( false, "task is in READY state upon return from method execute()" );
                         break;
@@ -2874,99 +2958,15 @@ exception_was_caught:
             innermost_running_task = old_innermost_running_task;
             return;
         }
-        inbox.set_is_idle( true );
         __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) {
-            if( parent.prefix().ref_count==1 ) {
-                if( SchedulerTraits::itt_possible ) {
-                    if( failure_count!=-1 ) {
-                        ITT_NOTIFY(sync_prepare, &parent.prefix().ref_count);
-                        // Notify Intel(R) Thread Profiler that thread has stopped spinning.
-                        ITT_NOTIFY(sync_acquired, this);
-                    }
-                    ITT_NOTIFY(sync_acquired, &parent.prefix().ref_count);
-                }
-                inbox.set_is_idle( false );
-                goto done;
-            }
-            // Try to steal a task from a random victim.
-            size_t n = arena->prefix().limit;
-            if( n>1 ) {
-                if( !my_affinity_id || !(t=get_mailbox_task()) ) {
-                    if ( !can_steal() )
-                        goto fail;
-                    size_t k = random.get() % (n-1);
-                    ArenaSlot* victim = &arena->slot[k];
-                    // The following condition excludes the master that might have 
-                    // already taken our previous place in the arena from the list .
-                    // of potential victims. But since such a situation can take 
-                    // place only in case of significant oversubscription, keeping
-                    // the checks simple seems to be preferable to complicating the code.
-                    if( k >= arena_index )
-                        ++victim;               // Adjusts random distribution to exclude self
-                    t = steal_task( *victim );
-                    if( !t ) goto fail;
-                    if( is_proxy(*t) ) {
-                        t = strip_proxy((task_proxy*)t);
-                        if( !t ) goto fail;
-                        GATHER_STATISTIC( ++proxy_steal_count );
-                    }
-                    GATHER_STATISTIC( ++steal_count );
-                    if( is_version_3_task(*t) ) {
-                        innermost_running_task = t;
-                        t->note_affinity( my_affinity_id );
-                    }
-                } else {
-                    GATHER_STATISTIC( ++mail_received_count );
-                }
-                __TBB_ASSERT(t,NULL);
-#if __TBB_SCHEDULER_OBSERVER
-                // No memory fence required for read of global_last_observer_proxy, because prior fence on steal/mailbox suffices.
-                if( local_last_observer_proxy!=global_last_observer_proxy ) {
-                    notify_entry_observers();
-                }
-#endif /* __TBB_SCHEDULER_OBSERVER */
-                {
-                    if( SchedulerTraits::itt_possible ) {
-                        if( failure_count!=-1 ) {
-                            // FIXME - might be victim, or might be selected from a mailbox
-                            // Notify Intel(R) Thread Profiler that thread has stopped spinning.
-                            ITT_NOTIFY(sync_acquired, this);
-                            // FIXME - might be victim, or might be selected from a mailbox
-                        }
-                    }
-                    __TBB_ASSERT(t,NULL);
-                    inbox.set_is_idle( false );
-                    break;
-                }
-            }
-fail:
-            if( SchedulerTraits::itt_possible && failure_count==-1 ) {
-                // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that
-                // the thread has started spinning.  Ideally, we would do this notification
-                // *before* the first failed attempt to steal, but at that point we do not
-                // know that the steal will fail.
-                ITT_NOTIFY(sync_prepare, this);
-                failure_count = 0;
-            }
-            // Pause, even if we are going to yield, because the yield might return immediately.
-            __TBB_Pause(PauseTime);
-            int yield_threshold = 2*int(n);
-            if( failure_count>=yield_threshold ) {
-                __TBB_Yield();
-                if( failure_count>=yield_threshold+100 ) {
-                    if( !old_innermost_running_task && arena->check_if_pool_is_empty() ) {
-                        // Current thread was created by RML and has nothing to do, so return it to the RML.
-                        // For purposes of affinity support, the thread is considered idle while it is in RML.
-                        // Restore innermost_running_task to its original value.
-                        innermost_running_task = NULL;
-                        return;
-                    }
-                    failure_count = yield_threshold;
-                }
-            }
+        // old_innermost_running_task is NULL *iff* a worker thread is in its "inborn" dispath loop
+        // (i.e. its execution stack is empty), and it should return from there if no work is available.
+        t = receive_or_steal_task( parent.prefix().ref_count, !old_innermost_running_task );
+        if (!t) {
+            if( parent.prefix().ref_count==1 ) goto done;
+            __TBB_ASSERT( is_worker() && !old_innermost_running_task, "a thread exits dispatch loop prematurely" );
+            innermost_running_task = NULL;
+            return;
         }
         __TBB_ASSERT(t,NULL);
         __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
@@ -3198,7 +3198,7 @@ void GenericScheduler::cleanup_master() {
 #endif /* __TBB_SCHEDULER_OBSERVER */
     if ( !is_local_task_pool_empty() ) {
         __TBB_ASSERT ( Governor::is_set(this), "TLS slot is cleared before the task pool cleanup" );
-        s.wait_for_all( *dummy_task, NULL );
+        s.local_wait_for_all( *s.dummy_task, NULL );
         __TBB_ASSERT ( Governor::is_set(this), "Other thread reused our TLS key during the task pool cleanup" );
     }
     s.free_scheduler();
@@ -3216,7 +3216,17 @@ void UnpaddedArenaPrefix::process( job& j ) {
     GenericScheduler& s = static_cast<GenericScheduler&>(j);
     __TBB_ASSERT( Governor::is_set(&s), NULL );
     __TBB_ASSERT( !s.innermost_running_task, NULL );
-    s.wait_for_all(*s.dummy_task,NULL);
+    // Try to steal a task.
+    // Passing reference count is technically unnecessary in this context,
+    // but omitting it here would add checks inside the function.
+    task* t = s.receive_or_steal_task( s.dummy_task->prefix().ref_count, /*return_if_no_work=*/true );
+    if (t) {
+        // A side effect of receive_or_steal_task is that innermost_running_task can be set.
+        // But for the outermost dispatch loop of a worker it has to be NULL.
+        s.innermost_running_task = NULL;
+        s.local_wait_for_all(*s.dummy_task,t);
+    }
+    __TBB_ASSERT( s.inbox.assert_is_idle(true), NULL );
     __TBB_ASSERT( !s.innermost_running_task, NULL );
 }
 
@@ -3664,14 +3674,14 @@ void task::destroy( task& victim ) {
 }
 
 void task::spawn_and_wait_for_all( task_list& list ) {
-    scheduler* s = Governor::local_scheduler();
+    GenericScheduler* s = Governor::local_scheduler();
     task* t = list.first;
     if( t ) {
         if( &t->prefix().next!=list.next_ptr )
-            s->spawn( *t->prefix().next, *list.next_ptr );
+            s->local_spawn( *t->prefix().next, *list.next_ptr );
         list.clear();
     }
-    s->wait_for_all( *this, t );
+    s->local_wait_for_all( *this, t );
 }
 
 /** Defined out of line so that compiler does not replicate task's vtable. 
diff --git a/src/tbb/tbb_assert_impl.h b/src/tbb/tbb_assert_impl.h
index 2a381f9..52cd780 100644
--- a/src/tbb/tbb_assert_impl.h
+++ b/src/tbb/tbb_assert_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
index 75ba5d5..5a04e59 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,8 +39,6 @@
 #include <cstring>
 #if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
     #include "tbb/tbb_exception.h"
-    #include <string> // std::string is used to construct runtime_error
-    #include <stdexcept>
 #endif
 
 using namespace std;
@@ -49,12 +47,17 @@ using namespace std;
 
 namespace tbb {
 
-namespace internal {
-
 #if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
 // The above preprocessor symbols are defined by compilers when exception handling is enabled.
 // However, in some cases it could be disabled for this file.
 
+const char* bad_last_alloc::what() const throw() { return "bad allocation in previous or concurrent attempt"; }
+const char* improper_lock::what() const throw() { return "attempted recursive lock on critical section or non-recursive mutex"; }
+const char* invalid_multiple_scheduling::what() const throw() { return "The same task_handle object cannot be executed more than once"; }
+const char* missing_wait::what() const throw() { return "wait() was not called on the structured_task_group"; }
+
+namespace internal {
+
 void handle_perror( int error_code, const char* what ) {
     char buf[128];
     sprintf(buf,"%s: ",what);
@@ -66,12 +69,30 @@ void handle_perror( int error_code, const char* what ) {
     throw runtime_error(buf);
 }
 
-void throw_bad_last_alloc_exception_v4() 
-{
-    throw bad_last_alloc();
+void throw_bad_last_alloc_exception_v4() { throw_exception(eid_bad_last_alloc); }
+
+void throw_exception_v4 ( exception_id eid ) {
+    switch ( eid ) {
+    case eid_bad_alloc: throw std::bad_alloc();
+    case eid_bad_last_alloc: throw bad_last_alloc();
+    case eid_nonpositive_step: throw std::invalid_argument("Step must be positive");
+    case eid_out_of_range: throw out_of_range("Index out of requested size range");
+    case eid_segment_range_error: throw range_error ("Index out of allocated segment slots");
+    case eid_index_range_error: throw range_error ("Index is not allocated");
+    case eid_missing_wait: throw missing_wait();
+    case eid_invalid_multiple_scheduling: throw invalid_multiple_scheduling();
+    case eid_improper_lock: throw improper_lock();
+    default: 
+        __TBB_ASSERT ( eid > 0 && eid < eid_max, "Unknown exception ID" );
+    }
 }
+
+} //namespace internal
+
 #endif //__EXCEPTIONS || _CPPUNWIND
 
+namespace internal {
+
 bool GetBoolEnvironmentVariable( const char * name ) {
     if( const char* s = getenv(name) )
         return strcmp(s,"0") != 0;
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
index 7481899..21b7f13 100644
--- a/src/tbb/tbb_misc.h
+++ b/src/tbb/tbb_misc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
index d61cac4..b20cb53 100644
--- a/src/tbb/tbb_resource.rc
+++ b/src/tbb/tbb_resource.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -90,7 +90,7 @@ BEGIN
             VALUE "FileDescription", "Threading Building Blocks library\0"
             VALUE "FileVersion", TBB_VERSION "\0"
 //what is it?            VALUE "InternalName", "tbb\0"
-            VALUE "LegalCopyright", "Copyright 2005-2009 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2010 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbb.dll\0"
diff --git a/src/tbb/tbb_thread.cpp b/src/tbb/tbb_thread.cpp
index bb328e2..68b6570 100644
--- a/src/tbb/tbb_thread.cpp
+++ b/src/tbb/tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -54,13 +54,9 @@ void free_closure_v3( void *ptr )
 }
 
 #if _WIN32||_WIN64 
-#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
-// The above preprocessor symbols are defined by compilers when exception handling is enabled.
-
 void handle_win_error( int error_code ) 
 {
     LPTSTR msg_buf;
-
     FormatMessage(
         FORMAT_MESSAGE_ALLOCATE_BUFFER | 
         FORMAT_MESSAGE_FROM_SYSTEM |
@@ -72,9 +68,10 @@ void handle_win_error( int error_code )
         0, NULL );
     const std::string msg_str(msg_buf);
     LocalFree(msg_buf);
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     throw std::runtime_error(msg_str);
+#endif
 }
-#endif //__EXCEPTIONS || _CPPUNWIND
 #endif // _WIN32||_WIN64
 
 void tbb_thread_v3::join()
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
index cd86de0..efb9b75 100644
--- a/src/tbb/tbb_version.h
+++ b/src/tbb/tbb_version.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tls.h b/src/tbb/tls.h
index 2e4768c..cf10afe 100644
--- a/src/tbb/tls.h
+++ b/src/tbb/tls.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/_config.h b/src/tbb/tools_api/_config.h
index 17c97e5..1876c3c 100644
--- a/src/tbb/tools_api/_config.h
+++ b/src/tbb/tools_api/_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/_disable_warnings.h b/src/tbb/tools_api/_disable_warnings.h
index e32f24f..84e341b 100644
--- a/src/tbb/tools_api/_disable_warnings.h
+++ b/src/tbb/tools_api/_disable_warnings.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/_ittnotify_static.h b/src/tbb/tools_api/_ittnotify_static.h
index 9604b4c..9a3238d 100644
--- a/src/tbb/tools_api/_ittnotify_static.h
+++ b/src/tbb/tools_api/_ittnotify_static.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify.h b/src/tbb/tools_api/ittnotify.h
index e9ebb0f..dbacfd2 100644
--- a/src/tbb/tools_api/ittnotify.h
+++ b/src/tbb/tools_api/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/ittnotify_static.c b/src/tbb/tools_api/ittnotify_static.c
index d03758b..ed48d21 100644
--- a/src/tbb/tools_api/ittnotify_static.c
+++ b/src/tbb/tools_api/ittnotify_static.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/win32-tbb-export.def b/src/tbb/win32-tbb-export.def
index d78bf6d..3bf5fc2 100644
--- a/src/tbb/win32-tbb-export.def
+++ b/src/tbb/win32-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -95,6 +95,14 @@ __TBB_machine_trylockbyte
 ?clear at captured_exception@tbb@@QAEXXZ
 #endif /* __TBB_EXCEPTIONS */
 
+; Symbols for exceptions thrown from TBB
+?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
+?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z
+?what at bad_last_alloc@tbb@@UBEPBDXZ
+?what at missing_wait@tbb@@UBEPBDXZ
+?what at invalid_multiple_scheduling@tbb@@UBEPBDXZ
+?what at improper_lock@tbb@@UBEPBDXZ
+
 ; tbb_misc.cpp
 ?assertion_failure at tbb@@YAXPBDH00 at Z
 ?get_initial_auto_partitioner_divisor at internal@tbb@@YAIXZ
@@ -102,7 +110,6 @@ __TBB_machine_trylockbyte
 ?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z
 ?runtime_warning at internal@tbb@@YAXPBDZZ
 TBB_runtime_interface_version
-?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
 
 ; itt_notify.cpp
 ?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z
@@ -183,6 +190,9 @@ TBB_runtime_interface_version
 ?release at scoped_lock@queuing_mutex at tbb@@QAEXXZ
 ?try_acquire at scoped_lock@queuing_mutex at tbb@@QAE_NAAV23@@Z
 
+; critical_section.cpp
+?internal_construct at critical_section_v4@internal at tbb@@QAEXXZ
+
 #if !TBB_NO_LEGACY
 ; concurrent_hash_map.cpp
 ?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QBE_NXZ
diff --git a/src/tbb/win64-tbb-export.def b/src/tbb/win64-tbb-export.def
index 4a3debf..9876901 100644
--- a/src/tbb/win64-tbb-export.def
+++ b/src/tbb/win64-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -72,7 +72,7 @@ __TBB_machine_pause
 ?terminate at task_scheduler_init@tbb@@QEAAXXZ
 ?observe at task_scheduler_observer_v3@internal at tbb@@QEAAX_N at Z
 
-; exception handling support
+; Exception handling in task scheduler
 #if __TBB_EXCEPTIONS
 ?allocate at allocate_root_with_context_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
 ?free at allocate_root_with_context_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
@@ -91,6 +91,14 @@ __TBB_machine_pause
 ?clear at captured_exception@tbb@@QEAAXXZ
 #endif /* __TBB_EXCEPTIONS */
 
+; Symbols for exceptions thrown from TBB
+?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
+?throw_exception_v4 at internal@tbb@@YAXW4exception_id at 12@@Z
+?what at bad_last_alloc@tbb@@UEBAPEBDXZ
+?what at missing_wait@tbb@@UEBAPEBDXZ
+?what at invalid_multiple_scheduling@tbb@@UEBAPEBDXZ
+?what at improper_lock@tbb@@UEBAPEBDXZ
+
 ; tbb_misc.cpp
 ?assertion_failure at tbb@@YAXPEBDH00 at Z
 ?get_initial_auto_partitioner_divisor at internal@tbb@@YA_KXZ
@@ -98,7 +106,6 @@ __TBB_machine_pause
 ?set_assertion_handler at tbb@@YAP6AXPEBDH00 at ZP6AX0H00@Z at Z
 ?runtime_warning at internal@tbb@@YAXPEBDZZ
 TBB_runtime_interface_version
-?throw_bad_last_alloc_exception_v4 at internal@tbb@@YAXXZ
 
 ; itt_notify.cpp
 ?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPEAXPEBX at Z
@@ -179,6 +186,9 @@ TBB_runtime_interface_version
 ?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ
 ?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z
 
+;critical_section.cpp
+?internal_construct at critical_section_v4@internal at tbb@@QEAAXXZ
+
 #if !TBB_NO_LEGACY
 ; concurrent_hash_map.cpp
 ?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QEBA_NXZ
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index adc6d4c..900fbbe 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/LifoQueue.h b/src/tbbmalloc/LifoList.h
similarity index 79%
rename from src/tbbmalloc/LifoQueue.h
rename to src/tbbmalloc/LifoList.h
index 9a81dd9..e45934c 100644
--- a/src/tbbmalloc/LifoQueue.h
+++ b/src/tbbmalloc/LifoList.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,14 +26,14 @@
     the GNU General Public License.
 */
 
-#ifndef _itt_common_malloc_LifoQueue_H_
-#define _itt_common_malloc_LifoQueue_H_
+#ifndef _itt_common_malloc_LifoList_H_
+#define _itt_common_malloc_LifoList_H_
 
 #include "TypeDefinitions.h"
 #include <string.h> // for memset()
 
 //! Checking the synchronization method
-/** FINE_GRAIN_LOCKS is the only variant for now; should be defined for LifoQueue */
+/** FINE_GRAIN_LOCKS is the only variant for now; should be defined for LifoList */
 #ifndef FINE_GRAIN_LOCKS
 #define FINE_GRAIN_LOCKS
 #endif
@@ -42,11 +42,12 @@ namespace rml {
 
 namespace internal {
 
-class LifoQueue {
+class LifoList {
 public:
-    inline LifoQueue();
+    inline LifoList();
     inline void push(void** ptr);
     inline void* pop(void);
+    inline void pushList(void **head, void **tail);
 
 private:
     void * top;
@@ -56,27 +57,35 @@ private:
 };
 
 #ifdef FINE_GRAIN_LOCKS
-/* LifoQueue assumes zero initialization so a vector of it can be created
+/* LifoList assumes zero initialization so a vector of it can be created
  * by just allocating some space with no call to constructor.
  * On Linux, it seems to be necessary to avoid linking with C++ libraries.
  *
  * By usage convention there is no race on the initialization. */
-LifoQueue::LifoQueue( ) : top(NULL)
+LifoList::LifoList( ) : top(NULL)
 {
     // MallocMutex assumes zero initialization
     memset(&lock, 0, sizeof(MallocMutex));
 }
 
-void LifoQueue::push( void **ptr )
+void LifoList::push( void **ptr )
 {   
     MallocMutex::scoped_lock scoped_cs(lock);
     *ptr = top;
     top = ptr;
 }
 
-void * LifoQueue::pop( )
+void LifoList::pushList( void **head, void **tail )
+{   
+    MallocMutex::scoped_lock scoped_cs(lock);
+    *tail = top;
+    top = head;
+}
+
+void * LifoList::pop( )
 {   
     void **result=NULL;
+    if (!top) goto done;
     {
         MallocMutex::scoped_lock scoped_cs(lock);
         if (!top) goto done;
@@ -93,5 +102,5 @@ done:
 } // namespace internal
 } // namespace rml
 
-#endif /* _itt_common_malloc_LifoQueue_H_ */
+#endif /* _itt_common_malloc_LifoList_H_ */
 
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
index 64bf66b..4ec32bf 100644
--- a/src/tbbmalloc/MapMemory.h
+++ b/src/tbbmalloc/MapMemory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/MemoryAllocator.cpp b/src/tbbmalloc/MemoryAllocator.cpp
index 749efda..c048987 100644
--- a/src/tbbmalloc/MemoryAllocator.cpp
+++ b/src/tbbmalloc/MemoryAllocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -55,9 +55,7 @@
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
-#if MALLOC_CHECK_RECURSION
 #include <new>        /* for placement new */
-#endif /* MALLOC_CHECK_RECURSION */
 
 extern "C" {
     void * scalable_malloc(size_t size);
@@ -78,9 +76,9 @@ extern "C" {
 #define ASSERT_TEXT NULL
 
 //! Define the main synchronization method
-/** It should be specified before including LifoQueue.h */
+/** It should be specified before including LifoList.h */
 #define FINE_GRAIN_LOCKS
-#include "LifoQueue.h"
+#include "LifoList.h"
 
 #define COLLECT_STATISTICS MALLOC_DEBUG && defined(MALLOCENV_COLLECT_STATISTICS)
 #include "Statistics.h"
@@ -208,53 +206,10 @@ public:
 
 #endif  /* MALLOC_CHECK_RECURSION */
 
-/*********** Code to provide thread ID and a thread-local void pointer **********/
-
-typedef intptr_t ThreadId;
-
-static ThreadId ThreadIdCount;
-
-static tls_key_t TLS_pointer_key;
-static tls_key_t Tid_key;
-
-static inline ThreadId  getThreadId(void)
-{
-    ThreadId result;
-    result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
-    if( !result ) {
-        RecursiveMallocCallProtector scoped;
-        // 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!
-        TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
-    }
-    return result;
-}
-
-static inline void* getThreadMallocTLS() {
-    void *result;
-    result = TlsGetValue_func( TLS_pointer_key );
-// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
-//    MALLOC_ASSERT( result, "Memory allocator not initialized" );
-    return result;
-}
-
-static inline void  setThreadMallocTLS( void * newvalue ) {
-    RecursiveMallocCallProtector scoped;
-    TlsSetValue_func( TLS_pointer_key, newvalue );
-}
-
-/*********** End code to provide thread ID and a TLS pointer **********/
-
-/*
- * The identifier to make sure that memory is allocated by scalable_malloc.
- */
-const uint64_t theMallocUniqueID=0xE3C7AF89A1E2D8C1ULL; 
-
 /*
  * This number of bins in the TLS that leads to blocks that we can allocate in.
  */
-const uint32_t numBlockBinLimit = 32;
+const uint32_t numBlockBinLimit = 31;
 
  /*
   * The number of bins to cache large objects.
@@ -263,6 +218,20 @@ const uint32_t numLargeObjectBins = 1024; // for 1024 max cached size is near 8M
  
 /********* The data structures and global objects        **************/
 
+union BackRefIdx { // composite index to backreference array
+    uint32_t t;
+    struct {
+        uint16_t master;   // index in BackRefMaster
+        uint16_t offset;   // offset from beginning of BackRefBlock
+    } s;
+};
+
+const BackRefIdx invalidIdx = {(uint32_t)-1};
+
+inline bool operator== (const BackRefIdx &idx1, const BackRefIdx &idx2) {
+    return idx1.t == idx2.t;
+}
+
 struct FreeObject {
     FreeObject  *next;
 };
@@ -293,12 +262,12 @@ struct Block;
 struct LocalBlockFields {
     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  *freeList;
+    BackRefIdx   backRefIdx;
     unsigned int allocatedCount;  /* Number of objects allocated (obviously by the owning thread) */
     unsigned int isFull;
 };
@@ -319,17 +288,49 @@ struct Bin {
 /*
  * This is a LIFO linked list that one can init, push or pop from
  */
-static LifoQueue freeBlockList;
+static LifoList freeBlockList;
 
 /*
  * When a block that is not completely free is returned for reuse by other threads
  * this is where the block goes.
  *
- * LifoQueue assumes zero initialization; so below its constructors are omitted,
+ * LifoList assumes zero initialization; so below its constructors are omitted,
  * to avoid linking with C++ libraries on Linux.
  */
-static char globalBinSpace[sizeof(LifoQueue)*numBlockBinLimit];
-static LifoQueue* globalSizeBins = (LifoQueue*)globalBinSpace;
+static char globalBinSpace[sizeof(LifoList)*numBlockBinLimit];
+static LifoList* globalSizeBins = (LifoList*)globalBinSpace;
+
+/*
+ * Per-thread pool of 16KB blocks. Idea behind it is to not share with other 
+ * threads memory that are likely in local cache(s) of our CPU.
+ */
+class FreeBlockPool {
+    static const int POOL_HIGH_MARK = 32;
+    static const int POOL_LOW_MARK  = 8;
+
+    Block *head;
+    Block *tail;
+    int    size;
+    void insertBlock(Block *block);
+public:
+    Block *getBlock();
+    void returnBlock(Block *block);
+    void releaseAllBlocks();
+};
+
+struct TLSData {
+    Bin           bin[numBlockBinLimit];
+    FreeBlockPool pool;
+};
+
+
+struct LargeObjectHeader {
+    void        *unalignedResult;   /* The address obtained from and returned to the OS */
+    size_t       unalignedSize;     /* The size that was requested from getMemory */
+    size_t       objectSize;        /* The size originally requested by a client */
+    bool         fromMapMemory;     /* True if allocated with MapMemory usage enforced */
+    BackRefIdx   backRefIdx;
+};
 
 static struct LargeObjectCacheStat {
     uintptr_t age;
@@ -341,6 +342,7 @@ struct CachedObject {
                  *prev;
     uintptr_t     age;
     bool          fromMapMemory;
+    BackRefIdx    backRefIdx;
 };
 
 class CachedObjectsList {
@@ -361,7 +363,7 @@ class CachedObjectsList {
        ctor not needed. */
     CachedObjectsList();
 public:
-    inline void push(void *buf, bool fromMapMemory, uintptr_t currAge);
+    inline void push(void *buf, bool fromMapMemory, BackRefIdx backRefIdx, uintptr_t currAge);
     inline CachedObject* pop(uintptr_t currAge);
     void releaseLastIfOld(uintptr_t currAge, size_t size);
 };
@@ -377,11 +379,6 @@ static CachedObjectsList* globalCachedObjectBins = (CachedObjectsList*)globalCac
 /********** Various numeric parameters controlling allocations ********/
 
 /*
- * The size of the TLS should be enough to hold numBlockBinLimit bins.
- */
-const uint32_t tlsSize = numBlockBinLimit * sizeof(Bin);
-
-/*
  * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
  *
  */
@@ -476,6 +473,45 @@ static ALWAYSINLINE( void checkInitialization() );
 #undef NOINLINE
 #endif /* !MALLOC_DEBUG */
 
+
+/*********** Code to provide thread ID and a thread-local void pointer **********/
+
+typedef intptr_t ThreadId;
+
+static ThreadId ThreadIdCount;
+
+static tls_key_t TLS_pointer_key;
+static tls_key_t Tid_key;
+
+static inline ThreadId  getThreadId(void)
+{
+    ThreadId result;
+    result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
+    if( !result ) {
+        RecursiveMallocCallProtector scoped;
+        // 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!
+        TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
+    }
+    return result;
+}
+
+static inline TLSData* getThreadMallocTLS() {
+    TLSData *result;
+    result = (TLSData *)TlsGetValue_func( TLS_pointer_key );
+// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
+//    MALLOC_ASSERT( result, "Memory allocator not initialized" );
+    return result;
+}
+
+static inline void  setThreadMallocTLS( TLSData * newvalue ) {
+    RecursiveMallocCallProtector scoped;
+    TlsSetValue_func( TLS_pointer_key, newvalue );
+}
+
+/*********** End code to provide thread ID and a TLS pointer **********/
+
 /*********** Code to acquire memory from the OS or other executive ****************/
 
 #if USE_DEFAULT_MEMORY_MAPPING
@@ -703,8 +739,11 @@ static int mallocBigBlock()
 /*
  * Forward Refs
  */
-static void initEmptyBlock(Block *block, size_t size);
 static Block *getEmptyBlock(size_t size);
+static BackRefIdx newBackRef();
+static void setBackRef(BackRefIdx backRefIdx, void *newPtr);
+static void removeBackRef(BackRefIdx backRefIdx);
+static inline void *getBackRef(BackRefIdx backRefIdx);
 
 static MallocMutex bootStrapLock;
 
@@ -716,7 +755,7 @@ static void *bootStrapMalloc(size_t size)
 {
     FreeObject *result;
 
-    MALLOC_ASSERT( size == tlsSize, ASSERT_TEXT );
+    MALLOC_ASSERT( size == sizeof(TLSData), ASSERT_TEXT );
 
     { // Lock with acquire
         MallocMutex::scoped_lock scoped_cs(bootStrapLock);
@@ -763,21 +802,18 @@ static void bootStrapFree(void* ptr)
 static void verifyTLSBin (Bin* bin, size_t size)
 {
     Block* temp;
-    Bin*   tls;
+    Bin*   tlsBin = getThreadMallocTLS()->bin;
     uint32_t index = getIndex(size);
     uint32_t objSize = getObjectSize(size);
 
-    tls = (Bin*)getThreadMallocTLS();
-    MALLOC_ASSERT( bin == tls+index, ASSERT_TEXT );
+    MALLOC_ASSERT( bin == tlsBin+index, ASSERT_TEXT );
 
-    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 );
+    if (tlsBin[index].activeBlk) {
+        MALLOC_ASSERT( tlsBin[index].activeBlk->owner == getThreadId(), ASSERT_TEXT );
+        MALLOC_ASSERT( tlsBin[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 );
+        for (temp = tlsBin[index].activeBlk->next; temp; temp=temp->next) {
+            MALLOC_ASSERT( temp!=tlsBin[index].activeBlk, ASSERT_TEXT );
             MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
             MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
             MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
@@ -785,9 +821,8 @@ static void verifyTLSBin (Bin* bin, size_t size)
                 MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
             }
         }
-        for (temp = tls[index].activeBlk->previous; temp; temp=temp->previous) {
+        for (temp = tlsBin[index].activeBlk->previous; temp; temp=temp->previous) {
             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 );
@@ -869,22 +904,22 @@ static void outofTLSBin (Bin* bin, Block* block)
  */
 static Bin* getAllocationBin(size_t size)
 {
-    Bin* tls = (Bin*)getThreadMallocTLS();
+    TLSData* tls = getThreadMallocTLS();
     if( !tls ) {
-        MALLOC_ASSERT( tlsSize >= sizeof(Bin) * numBlockBins, ASSERT_TEXT );
-        tls = (Bin*) bootStrapMalloc(tlsSize);
+        MALLOC_ASSERT( sizeof(TLSData) >= sizeof(Bin) * numBlockBins + sizeof(FreeBlockPool), ASSERT_TEXT );
+        tls = (TLSData*) bootStrapMalloc(sizeof(TLSData));
         if ( !tls ) return NULL;
         /* 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 );
+            MALLOC_ASSERT( tls->bin[i].activeBlk == 0, ASSERT_TEXT );
+            MALLOC_ASSERT( tls->bin[i].mailbox == 0, ASSERT_TEXT );
         }
 #endif
         setThreadMallocTLS(tls);
     }
     MALLOC_ASSERT( tls, ASSERT_TEXT );
-    return tls+getIndex(size);
+    return tls->bin + getIndex(size);
 }
 
 const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
@@ -1055,7 +1090,6 @@ static Block *getPartialBlock(Bin* bin, unsigned int size)
     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 );
@@ -1127,9 +1161,6 @@ static void returnPartialBlock(Bin* bin, Block *block)
 
 static void cleanBlockHeader(Block *block)
 {
-#if MALLOC_DEBUG
-    memset (block, 0x0e5, blockSize);
-#endif
     block->next = NULL;
     block->previous = NULL;
     block->freeList = NULL;
@@ -1145,10 +1176,9 @@ static void initEmptyBlock(Block *block, size_t size)
     // allows better compiler optimization as they basically share the code.
     unsigned int index      = getIndex(size);
     unsigned int objectSize = getObjectSize(size); 
-    Bin* tls = (Bin*)getThreadMallocTLS();
+    Bin* tlsBin = getThreadMallocTLS()->bin;
 
     cleanBlockHeader(block);
-    block->mallocUniqueID = theMallocUniqueID;
     block->objectSize = objectSize;
     block->owner = getThreadId();
     // bump pointer should be prepared for first allocation - thus mode it down to objectSize
@@ -1156,10 +1186,55 @@ static void initEmptyBlock(Block *block, size_t size)
 
     // 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;
+    block->nextPrivatizable = tlsBin? (Block*)(tlsBin + 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 ));
-  }
+}
+
+void FreeBlockPool::insertBlock(Block *block)
+{
+    size++;
+    block->next = head;
+    head = block;
+    if (!tail)
+        tail = block;
+}
+
+Block *FreeBlockPool::getBlock()
+{
+    Block *result = head;
+    if (head) {
+        size--;
+        head = head->next;
+        if (!head)
+            tail = NULL;
+    }
+    return result;
+}
+
+void FreeBlockPool::returnBlock(Block *block)
+{
+    MALLOC_ASSERT( size <= POOL_HIGH_MARK, ASSERT_TEXT );
+    if (size == POOL_HIGH_MARK) {
+        // release cold blocks and add hot one
+        Block *headToFree = head, 
+              *tailToFree = tail;
+        for (int i=0; i<POOL_LOW_MARK-2; i++)
+            headToFree = headToFree->next;
+        tail = headToFree;
+        headToFree = headToFree->next;
+        tail->next = NULL;
+        size = POOL_LOW_MARK-1;
+        freeBlockList.pushList((void **)headToFree, (void **)tailToFree);
+    }
+    insertBlock(block);
+}
+
+void FreeBlockPool::releaseAllBlocks()
+{
+    if (head) 
+        freeBlockList.pushList((void**)head, (void**)tail);
+}
 
 /* Return an empty uninitialized block in a non-blocking fashion. */
 static Block *getRawBlock()
@@ -1190,45 +1265,57 @@ static Block *getRawBlock()
         TRACEF(( "[ScalableMalloc trace] Pushing partial rest of block back on.\n" ));
         freeBlockList.push((void **)bigBlock);
     }
+
     return result;
 }
 
 /* Return an empty uninitialized block in a non-blocking fashion. */
 static Block *getEmptyBlock(size_t size)
 {
-    Block *result = getRawBlock();
-
+    Block *result = NULL;
+    TLSData* tls = getThreadMallocTLS();
+    if (tls)
+        result = tls->pool.getBlock();
+    if (!result) {
+        BackRefIdx backRefIdx = newBackRef();
+        if (backRefIdx == invalidIdx || !(result = getRawBlock()))
+            return NULL;
+        setBackRef(backRefIdx, result);
+        result->backRefIdx = backRefIdx;
+    }
     if (result) {
         initEmptyBlock(result, size);
         STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
     }
-
     return result;
 }
 
 /* We have a block give it back to the malloc block manager */
-static void returnEmptyBlock (Block *block, bool keepTheBin = true)
+static void returnEmptyBlock (Block *block, bool poolTheBlock)
 {
     // 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 );
-    if (keepTheBin) {
-        /* We should keep the TLS bin structure */
-        MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
-        MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
-    }
+    MALLOC_ASSERT( !poolTheBlock || block->next == NULL, ASSERT_TEXT );
+    MALLOC_ASSERT( !poolTheBlock || block->previous == NULL, ASSERT_TEXT );
     STAT_increment(block->owner, getIndex(block->objectSize), freeBlockBack);
 
     cleanBlockHeader(block);
 
     block->nextPrivatizable = NULL;
 
-    block->mallocUniqueID=0;
     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);
-    freeBlockList.push((void **)block);
+    if (poolTheBlock) {
+        MALLOC_ASSERT(getThreadMallocTLS(), "Is TLS still not initialized?");
+        getThreadMallocTLS()->pool.returnBlock(block);
+    }
+    else {
+        removeBackRef(block->backRefIdx);
+        freeBlockList.push((void **)block);
+    }
 }
 
 inline static Block* getActiveBlock( Bin* bin )
@@ -1279,12 +1366,15 @@ static StartupBlock *firstStartupBlock;
 
 static StartupBlock *getNewStartupBlock()
 {
-    StartupBlock *block = (StartupBlock *)getRawBlock();
+    BackRefIdx backRefIdx = newBackRef();
+    if (backRefIdx == invalidIdx) return NULL;
 
+    StartupBlock *block = (StartupBlock *)getRawBlock();
     if (!block) return NULL;
 
     cleanBlockHeader(block);
-    block->mallocUniqueID = theMallocUniqueID;
+    setBackRef(backRefIdx, block);
+    block->backRefIdx = backRefIdx;
     // use startupAllocObjSizeMark to mark objects from startup block marker
     block->objectSize = startupAllocObjSizeMark;
     block->bumpPtr = (FreeObject *)((uintptr_t)block + sizeof(StartupBlock));
@@ -1328,7 +1418,7 @@ static FreeObject *startupAlloc(size_t size)
             (FreeObject *)((uintptr_t)firstStartupBlock->bumpPtr + reqSize);
     }
     if (newBlock && newBlockUnused)
-        returnEmptyBlock(newBlock);
+        returnEmptyBlock(newBlock, /*poolTheBlock=*/false);
 
     // keep object size at the negative offset
     *((size_t*)result) = size;
@@ -1367,7 +1457,7 @@ static void startupFree(StartupBlock *block, void *ptr)
     }
     if (blockToRelease) {
         blockToRelease->previous = blockToRelease->next = NULL;
-        returnEmptyBlock(blockToRelease);
+        returnEmptyBlock(blockToRelease, /*poolTheBlock=*/false);
     }
 }
 
@@ -1375,6 +1465,186 @@ static void startupFree(StartupBlock *block, void *ptr)
 
 /********* End thread related code  *************/
 
+/********* backreferences ***********************/
+/* Each 16KB block and each large memory object header contains BackRefIdx 
+ * that points out in some BackRefBlock which points back to this block or header.
+ */
+struct BackRefBlock {
+    BackRefBlock *nextForUse;     // the next in the chain of blocks with free items
+    FreeObject   *bumpPtr;        // bump pointer moves from the end to the beginning of the block
+    FreeObject   *freeList;
+    int           allocatedCount; // the number of objects allocated
+    int           myNum;          // the index in the parent array
+    MallocMutex   blockMutex;
+    bool          addedToForUse;  // this block is already added to the listForUse chain
+
+    BackRefBlock(BackRefBlock *blockToUse, int myNum) :
+        nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + blockSize - sizeof(void*))),
+        freeList(NULL), allocatedCount(0), myNum(myNum), addedToForUse(false) {}
+};
+
+// max number of backreference pointers in 16KB block
+static const int BR_MAX_CNT = (blockSize-sizeof(BackRefBlock))/sizeof(void*);
+
+struct BackRefMaster {
+/* A 16KB block can hold up to ~2K back pointers to 16KB blocks or large objects,
+ * so it can address at least 32MB. The array of 64KB holds 8K pointers
+ * to such blocks, addressing ~256 GB.
+ */
+    static const size_t bytes = 64*1024;
+    static const int dataSz;
+
+    BackRefBlock  *active;         // if defined, use it for allocations
+    BackRefBlock  *listForUse;     // the chain of data blocks with free items
+    int            lastUsed;       // index of the last used block
+    BackRefBlock  *backRefBl[1];   // the real size of the array is dataSz
+
+    BackRefBlock *findFreeBlock();
+    bool          addActiveBackRefBlock();
+};
+
+const int BackRefMaster::dataSz
+    = 1+(BackRefMaster::bytes-sizeof(BackRefMaster))/sizeof(BackRefBlock*);
+
+static MallocMutex backRefMutex;
+static BackRefMaster *backRefMaster;
+
+static bool initBackRefMaster()
+{
+    // MapMemory forced because the function runs during startup 
+    backRefMaster = (BackRefMaster*)getRawMemory(BackRefMaster::bytes, 
+                                                 /*alwaysUseMap=*/true);
+    if (NULL == backRefMaster)
+        return false;
+    backRefMaster->listForUse = NULL;
+    backRefMaster->lastUsed = 0;
+    
+    if (!backRefMaster->addActiveBackRefBlock()) {
+        freeRawMemory(backRefMaster, BackRefMaster::bytes, /*alwaysUseMap=*/true);
+        return false;
+    }
+    return true;
+}
+
+bool BackRefMaster::addActiveBackRefBlock()
+{
+    if (NULL == (active = (BackRefBlock*)getRawBlock()))
+        return false;
+    memset(active, 0, blockSize);
+    new (active) BackRefBlock(active, lastUsed);
+    backRefBl[lastUsed] = active;
+    return true;
+}
+
+BackRefBlock *BackRefMaster::findFreeBlock()
+{
+    if (active->allocatedCount < BR_MAX_CNT)
+        return active;
+        
+    if (listForUse) {                                   // use released list
+        active = listForUse;
+        listForUse = listForUse->nextForUse;
+        MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);
+        active->addedToForUse = false;
+    } else if (lastUsed-1 < backRefMaster->dataSz) {    // allocate new data node
+        lastUsed++;
+        if (!backRefMaster->addActiveBackRefBlock()) {
+            lastUsed--;
+            return NULL;
+        }
+    } else  // no free blocks, give up
+        return NULL;
+    return active;
+}
+
+static inline void *getBackRef(BackRefIdx backRefIdx)
+{
+    // !backRefMaster means no initialization done, so it can't be valid memory
+    if (!backRefMaster || backRefIdx.s.master > backRefMaster->lastUsed
+        || backRefIdx.s.offset >= BR_MAX_CNT) 
+        return NULL;
+    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.s.master]
+                     + sizeof(BackRefBlock)+backRefIdx.s.offset*sizeof(void*));
+}
+
+static void setBackRef(BackRefIdx backRefIdx, void *newPtr)
+{
+    MALLOC_ASSERT(backRefIdx.s.master<=backRefMaster->lastUsed && backRefIdx.s.offset<BR_MAX_CNT,
+                  ASSERT_TEXT);
+    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.s.master]
+              + sizeof(BackRefBlock) + backRefIdx.s.offset*sizeof(void*)) = newPtr;
+}
+
+static BackRefIdx newBackRef()
+{
+    BackRefBlock *blockToUse;
+    void **toUse;
+    BackRefIdx res;
+
+    do {
+        { // global lock taken to find a block
+            MallocMutex::scoped_lock lock(backRefMutex);
+
+            MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);
+            if (! (blockToUse = backRefMaster->findFreeBlock()))
+                return invalidIdx;
+        }
+        toUse = NULL;
+        { // the block is locked to find a reference
+            MallocMutex::scoped_lock lock(blockToUse->blockMutex);
+
+            if (blockToUse->freeList) {
+                toUse = (void**)blockToUse->freeList;
+                blockToUse->freeList = blockToUse->freeList->next;
+            } else if (blockToUse->allocatedCount < BR_MAX_CNT) {
+                toUse = (void**)blockToUse->bumpPtr;
+                blockToUse->bumpPtr = 
+                    (FreeObject*)((uintptr_t)blockToUse->bumpPtr - sizeof(void*));
+                if (blockToUse->allocatedCount == BR_MAX_CNT-1) {
+                    MALLOC_ASSERT((uintptr_t)blockToUse->bumpPtr
+                                  < (uintptr_t)blockToUse+sizeof(BackRefBlock),
+                                  ASSERT_TEXT);
+                    blockToUse->bumpPtr = NULL;
+                }
+            }
+            if (toUse)
+                blockToUse->allocatedCount++;
+        } // end of lock scope
+    } while (!toUse);
+    res.s.master = blockToUse->myNum;
+    res.s.offset = 
+        ((uintptr_t)toUse - ((uintptr_t)blockToUse + sizeof(BackRefBlock)))/sizeof(void*);
+    return res;
+}
+
+static void removeBackRef(BackRefIdx backRefIdx)
+{
+    MALLOC_ASSERT(backRefIdx.s.master<=backRefMaster->lastUsed 
+                  && backRefIdx.s.offset<BR_MAX_CNT, ASSERT_TEXT);
+    BackRefBlock *currBlock = backRefMaster->backRefBl[backRefIdx.s.master];
+    FreeObject *freeObj = (FreeObject*)((uintptr_t)currBlock + sizeof(BackRefBlock)
+                                        + backRefIdx.s.offset*sizeof(void*));
+    {
+        MallocMutex::scoped_lock lock(currBlock->blockMutex);
+
+        freeObj->next = currBlock->freeList;
+        currBlock->freeList = freeObj;
+        currBlock->allocatedCount--;
+    }
+    // TODO: do we need double-check here?
+    if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {
+        MallocMutex::scoped_lock lock(backRefMutex);
+
+        if (!currBlock->addedToForUse && currBlock!=backRefMaster->active) {
+            currBlock->nextForUse = backRefMaster->listForUse;
+            backRefMaster->listForUse = currBlock;
+            currBlock->addedToForUse = true;
+        }
+    }
+}
+
+/********* End of backreferences ***********************/
+
 /********* Library initialization *************/
 
 //! Value indicating the state of initialization.
@@ -1398,9 +1668,14 @@ 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 );
+    MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );
 
-// Create keys for thread-local storage and for thread id
 // TODO: add error handling, and on error do something better than exit(1)
+    if (!mallocBigBlock() || !initBackRefMaster()) {
+        fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
+        exit(1);
+    }
+// Create keys for thread-local storage and for thread id
 #if USE_WINTHREAD
     TLS_pointer_key = TlsAlloc();
     Tid_key = TlsAlloc();
@@ -1415,12 +1690,6 @@ static void initMemoryManager()
 #if COLLECT_STATISTICS
     initStatisticsCollection();
 #endif
-
-    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.
@@ -1461,20 +1730,12 @@ static void checkInitialization()
  * objects have the Block structure at each 16K boundary.
  *
  */
-
-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 */
-    bool         fromMapMemory;     /* Memory allocated when MapMemory usage is forced */
-};
-
-void CachedObjectsList::push(void *buf, bool fromMapMemory, uintptr_t currAge)
+void CachedObjectsList::push(void *buf, bool fromMapMemory, BackRefIdx backRefIdx, uintptr_t currAge)
 {   
     CachedObject *ptr = (CachedObject*)buf;
     ptr->prev = NULL;
     ptr->age  = currAge;
+    ptr->backRefIdx = backRefIdx;
     ptr->fromMapMemory = fromMapMemory;
 
     MallocMutex::scoped_lock scoped_cs(lock);
@@ -1541,6 +1802,7 @@ void CachedObjectsList::releaseLastIfOld(uintptr_t currAge, size_t size)
     }
     while ( toRelease ) {
         CachedObject *helper = toRelease->next;
+        removeBackRef(toRelease->backRefIdx);
         freeRawMemory(toRelease, size, toRelease->fromMapMemory);
         toRelease = helper;
     }
@@ -1602,29 +1864,29 @@ static inline void* mallocLargeObject (size_t size, size_t alignment,
                                        bool startupAlloc = false)
 {
     void * unalignedArea;
+    CachedObject* co;
     size_t allocationSize = alignUp(size+sizeof(LargeObjectHeader)+alignment, 
                                     largeObjectCacheStep);
     bool   blockFromMapMemory = false;
+    BackRefIdx backRefIdx;
 
-    if (startupAlloc) {
-        if (! (unalignedArea = getRawMemory(allocationSize, /*alwaysUseMap=*/true)))
-            return NULL;
+    if (!startupAlloc && (co = allocateCachedLargeObject(allocationSize))) {
+        blockFromMapMemory = co->fromMapMemory;
+        backRefIdx = co->backRefIdx;
+        unalignedArea = co;
     } else {
-        CachedObject* cachedObj = allocateCachedLargeObject(allocationSize);
-        if (cachedObj) {
-            blockFromMapMemory = cachedObj->fromMapMemory;
-            unalignedArea = cachedObj;
-        } else {
-            unalignedArea = getRawMemory(allocationSize);
-            if (!unalignedArea)
-                return NULL;
-            STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
-        }
+        if ((backRefIdx = newBackRef()) == invalidIdx) return NULL;
+        unalignedArea = getRawMemory(allocationSize, /*alwaysUseMap=*/startupAlloc);
+        if (!unalignedArea) return NULL;
+        STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
     }
-    void *alignedArea = (void*)alignUp((uintptr_t)unalignedArea+sizeof(LargeObjectHeader), alignment);
-    LargeObjectHeader *header = (LargeObjectHeader*)((uintptr_t)alignedArea-sizeof(LargeObjectHeader));
+
+    void *alignedArea =
+          (void*)alignUp((uintptr_t)unalignedArea+sizeof(LargeObjectHeader), alignment);
+    LargeObjectHeader *header = ((LargeObjectHeader*)alignedArea)-1;
+    setBackRef(backRefIdx, header);
+    header->backRefIdx = backRefIdx;
     header->unalignedResult = unalignedArea;
-    header->mallocUniqueID=theMallocUniqueID;
     header->unalignedSize = allocationSize;
     header->objectSize = size;
     header->fromMapMemory = startupAlloc || blockFromMapMemory;
@@ -1639,8 +1901,10 @@ static bool freeLargeObjectToCache (LargeObjectHeader* header)
     if (idx<numLargeObjectBins) {
         MALLOC_ASSERT( size%largeObjectCacheStep==0, ASSERT_TEXT );
         uintptr_t currAge = cleanupCacheIfNeed ();
-        globalCachedObjectBins[idx].push(header->unalignedResult, 
-                                         header->fromMapMemory, currAge);
+        globalCachedObjectBins[idx].push(header->unalignedResult,
+                                         header->fromMapMemory,
+                                         header->backRefIdx,
+                                         currAge);
 
         STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeObj);
         return true;
@@ -1652,8 +1916,8 @@ static inline void freeLargeObject (void *object)
 {
     LargeObjectHeader *header;
     header = (LargeObjectHeader *)((uintptr_t)object - sizeof(LargeObjectHeader));
-    header->mallocUniqueID = 0;
     if (!freeLargeObjectToCache(header)) {
+        removeBackRef(header->backRefIdx);
         freeRawMemory(header->unalignedResult, header->unalignedSize, 
                       /*alwaysUseMap=*/ header->fromMapMemory);
         STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);
@@ -1732,10 +1996,10 @@ static void moveBlockToBinFront(Block *block)
 static void processLessUsedBlock(Block *block)
 {
     Bin* bin = getAllocationBin(block->objectSize);
-    if (block != getActiveBlock(bin) && block != getActiveBlock(bin)->previous ) {
+    if (block != getActiveBlock(bin)) {
         /* We are not actively using this block; return it to the general block pool */
         outofTLSBin(bin, block);
-        returnEmptyBlock(block);
+        returnEmptyBlock(block, /*poolTheBlock=*/true);
     } else {
         /* all objects are free - let's restore the bump pointer */
         restoreBumpPtr(block);
@@ -1786,7 +2050,6 @@ static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
 
     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 && (0==alignment || isAligned(ptr, alignment))) {
             loh->objectSize = size;
@@ -1797,7 +2060,6 @@ static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
         }
     } else {
         Block* block = (Block *)alignDown(ptr, blockSize);
-        MALLOC_ASSERT( block->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
         copySize = block->objectSize;
         if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
             return ptr;
@@ -1853,7 +2115,7 @@ static unsigned int threadGoingDownCount = 0;
 */
 extern "C" void mallocThreadShutdownNotification(void* arg)
 {
-    Bin   *tls;
+    TLSData *tls;
     Block *threadBlock;
     Block *threadlessBlock;
     unsigned int index;
@@ -1866,39 +2128,42 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
     TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return start %d\n",
              getThreadId(),  threadGoingDownCount++ ));
 #ifdef USE_WINTHREAD
-    tls = (Bin*)getThreadMallocTLS();
+    tls = getThreadMallocTLS();
 #else
-    tls = (Bin*)arg;
+    tls = (TLSData*)arg;
 #endif
     if (tls) {
+        Bin *tlsBin = tls->bin;
+        tls->pool.releaseAllBlocks();
+
         for (index = 0; index < numBlockBins; index++) {
-            if (tls[index].activeBlk==NULL)
+            if (tlsBin[index].activeBlk==NULL)
                 continue;
-            threadlessBlock = tls[index].activeBlk->previous;
+            threadlessBlock = tlsBin[index].activeBlk->previous;
             while (threadlessBlock) {
                 threadBlock = threadlessBlock->previous;
                 if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
-                    /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
-                    returnEmptyBlock(threadlessBlock, false);
+                    /* we destroy the thread, so not use its block pool */
+                    returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
                 } else {
-                    returnPartialBlock(tls+index, threadlessBlock);
+                    returnPartialBlock(tlsBin+index, threadlessBlock);
                 }
                 threadlessBlock = threadBlock;
             }
-            threadlessBlock = tls[index].activeBlk;
+            threadlessBlock = tlsBin[index].activeBlk;
             while (threadlessBlock) {
                 threadBlock = threadlessBlock->next;
                 if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
-                    /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
-                    returnEmptyBlock(threadlessBlock, false);
+                    /* we destroy the thread, so not use its block pool */
+                    returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
                 } else {
-                    returnPartialBlock(tls+index, threadlessBlock);
+                    returnPartialBlock(tlsBin+index, threadlessBlock);
                 }
                 threadlessBlock = threadBlock;
             }
-            tls[index].activeBlk = 0;
+            tlsBin[index].activeBlk = 0;
         }
-        bootStrapFree((void*)tls);
+        bootStrapFree(tls);
         setThreadMallocTLS(NULL);
     }
 
@@ -1907,7 +2172,6 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
 
 extern "C" void mallocProcessShutdownNotification(void)
 {
-    // for now, this function is only necessary for dumping statistics
 #if COLLECT_STATISTICS
     ThreadId nThreads = ThreadIdCount;
     for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
@@ -1921,9 +2185,9 @@ extern "C" void mallocProcessShutdownNotification(void)
  * Bad dereference caused by a foreign pointer is possible only here, not earlier in call chain.
  * Separate function isolates SEH code, as it has bad influence on compiler optimization.
  */
-static inline uint64_t safer_dereference (uint64_t *ptr)
+static inline BackRefIdx safer_dereference (BackRefIdx *ptr)
 {
-    uint64_t id;
+    BackRefIdx id;
 #if _MSC_VER
     __try {
 #endif
@@ -1931,7 +2195,7 @@ static inline uint64_t safer_dereference (uint64_t *ptr)
 #if _MSC_VER
     } __except( GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION? 
                 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {
-        id = 0;
+        id = invalidIdx;
     }
 #endif
     return id;
@@ -1939,12 +2203,17 @@ static inline uint64_t safer_dereference (uint64_t *ptr)
 
 static inline bool isRecognized (void* ptr)
 {
-    uint64_t id = safer_dereference(
-        isLargeObject(ptr)
-            ? &((LargeObjectHeader*)((uintptr_t)ptr-sizeof(LargeObjectHeader)))->mallocUniqueID
-            : &((Block *)alignDown(ptr, blockSize))->mallocUniqueID
-    );
-    return id == theMallocUniqueID;
+    void* expected;
+    BackRefIdx* idx;
+
+    if (isLargeObject(ptr)) {
+        expected = (LargeObjectHeader*)((uintptr_t)ptr-sizeof(LargeObjectHeader));
+        idx = &((LargeObjectHeader*)expected)->backRefIdx;
+    } else {
+        expected = alignDown(ptr, blockSize);
+        idx = &((Block*)expected)->backRefIdx;
+    }
+    return expected == getBackRef(safer_dereference(idx));
 }
 
 /********* The malloc code          *************/
@@ -2069,6 +2338,7 @@ extern "C" void scalable_free (void *object) {
     if (!object) {
         return;
     }
+    MALLOC_ASSERT(isRecognized(object), "Invalid pointer in scalable_free detected.");
 
     if (isLargeObject(object)) {
         freeLargeObject(object);
@@ -2076,7 +2346,6 @@ extern "C" void scalable_free (void *object) {
     } 
 
     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 );
 
 #if MALLOC_CHECK_RECURSION
@@ -2349,19 +2618,16 @@ extern "C" size_t scalable_msize(void* ptr)
     if (ptr) {
         if (isLargeObject(ptr)) {
             LargeObjectHeader* loh = (LargeObjectHeader*)((uintptr_t)ptr - sizeof(LargeObjectHeader));
-            if (loh->mallocUniqueID==theMallocUniqueID)
-                return loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
+            return loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
         } else {
             Block* block = (Block *)alignDown(ptr, blockSize);
-            if (block->mallocUniqueID==theMallocUniqueID) {
 #if MALLOC_CHECK_RECURSION
-                size_t size = block->objectSize? block->objectSize : startupMsize(ptr);
+            size_t size = block->objectSize? block->objectSize : startupMsize(ptr);
 #else
-                size_t size = block->objectSize;
+            size_t size = block->objectSize;
 #endif
-                MALLOC_ASSERT(size>0 && size<minLargeObjectSize, ASSERT_TEXT);
-                return size;
-            }
+            MALLOC_ASSERT(size>0 && size<minLargeObjectSize, ASSERT_TEXT);
+            return size;
         }
     }
     errno = EINVAL;
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
index 6eeff1a..9b59d0e 100644
--- a/src/tbbmalloc/Statistics.h
+++ b/src/tbbmalloc/Statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 20a03b7..9b90874 100644
--- a/src/tbbmalloc/TypeDefinitions.h
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -57,6 +57,7 @@
 // Include files containing declarations of intptr_t and uintptr_t
 #include <stddef.h>  // size_t
 #if _MSC_VER
+typedef unsigned __int16 uint16_t;
 typedef unsigned __int32 uint32_t;
 typedef unsigned __int64 uint64_t;
 #else
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin-tbbmalloc-export.def
index 49a4590..cd766d7 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin32-proxy-export.def b/src/tbbmalloc/lin32-proxy-export.def
index 16411ce..ba22eca 100644
--- a/src/tbbmalloc/lin32-proxy-export.def
+++ b/src/tbbmalloc/lin32-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64-proxy-export.def b/src/tbbmalloc/lin64-proxy-export.def
index 21a0f08..b6eb7ae 100644
--- a/src/tbbmalloc/lin64-proxy-export.def
+++ b/src/tbbmalloc/lin64-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64ipf-proxy-export.def b/src/tbbmalloc/lin64ipf-proxy-export.def
index 21a0f08..b6eb7ae 100644
--- a/src/tbbmalloc/lin64ipf-proxy-export.def
+++ b/src/tbbmalloc/lin64ipf-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/mac32-tbbmalloc-export.def b/src/tbbmalloc/mac32-tbbmalloc-export.def
index c211ce5..295fce2 100644
--- a/src/tbbmalloc/mac32-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/src/tbbmalloc/mac64-tbbmalloc-export.def b/src/tbbmalloc/mac64-tbbmalloc-export.def
index c211ce5..295fce2 100644
--- a/src/tbbmalloc/mac64-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
index 5f27d3c..648c20e 100644
--- a/src/tbbmalloc/proxy.cpp
+++ b/src/tbbmalloc/proxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -222,13 +222,31 @@ void* safer_scalable_aligned_realloc_##CRTLIB( void *ptr, size_t size, size_t al
     return safer_scalable_aligned_realloc( ptr, size, aligment, &func_ptrs );             \
 } 
 
+// limit is 30 bytes/60 symbols per line
+const char* known_bytecodes[] = {
+#if _WIN64
+    "4883EC284885C974",       //release free() win64
+    "4883EC384885C975",       //release msize() win64
+    "4885C974375348",         //release free() 8.0.50727.42 win64
+    "48894C24084883EC28BA",   //debug prologue for win64
+    "4C8BC1488B0DA6E4040033", //win64 SDK
+    "4883EC284885C975",       //release msize() 10.0.21003.1 win64
+#else
+    "558BEC6A018B",           //debug free() & _msize() 8.0.50727.4053 win32
+    "6A1868********E8",       //release free() 8.0.50727.4053 win32
+    "6A1C68********E8",       //release _msize() 8.0.50727.4053 win32
+    "8BFF558BEC6A",           //debug free() & _msize() 9.0.21022.8 win32
+    "8BFF558BEC83",           //debug free() & _msize() 10.0.21003.1 win32
+#endif
+    NULL
+    };
+
 #if _WIN64
 #define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(CRT_VER)\
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,  9, (FUNCPTR*)&orig_free_ ## CRT_VER ## d );  \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER,       0, NULL );                                   \
-    orig_free_ ## CRT_VER = NULL;                                                                                                                               \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER ## d, 9, (FUNCPTR*)&orig_msize_ ## CRT_VER ## d ); \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER,      7, (FUNCPTR*)&orig_msize_ ## CRT_VER );      \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,  known_bytecodes, (FUNCPTR*)&orig_free_ ## CRT_VER ## d );  \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER,       known_bytecodes, (FUNCPTR*)&orig_free_ ## CRT_VER );       \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER ## d, known_bytecodes, (FUNCPTR*)&orig_msize_ ## CRT_VER ## d ); \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER,      known_bytecodes, (FUNCPTR*)&orig_msize_ ## CRT_VER );      \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "realloc",         (FUNCPTR)safer_scalable_realloc_ ## CRT_VER ## d,         0, NULL); \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "realloc",         (FUNCPTR)safer_scalable_realloc_ ## CRT_VER,              0, NULL); \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_aligned_free",   (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,            0, NULL); \
@@ -237,10 +255,10 @@ void* safer_scalable_aligned_realloc_##CRTLIB( void *ptr, size_t size, size_t al
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "_aligned_realloc",(FUNCPTR)safer_scalable_aligned_realloc_ ## CRT_VER,      0, NULL);
 #else
 #define __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(CRT_VER)\
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,  5, (FUNCPTR*)&orig_free_ ## CRT_VER ## d );  \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER,       7, (FUNCPTR*)&orig_free_ ## CRT_VER );       \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER ## d, 5, (FUNCPTR*)&orig_msize_ ## CRT_VER ## d ); \
-    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER,      7, (FUNCPTR*)&orig_msize_ ## CRT_VER );      \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,  known_bytecodes, (FUNCPTR*)&orig_free_ ## CRT_VER ## d );  \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "free",  (FUNCPTR)safer_scalable_free_ ## CRT_VER,       known_bytecodes, (FUNCPTR*)&orig_free_ ## CRT_VER );       \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER ## d, known_bytecodes, (FUNCPTR*)&orig_msize_ ## CRT_VER ## d ); \
+    ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "_msize",(FUNCPTR)safer_scalable_msize_ ## CRT_VER,      known_bytecodes, (FUNCPTR*)&orig_msize_ ## CRT_VER );      \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "realloc",         (FUNCPTR)safer_scalable_realloc_ ## CRT_VER ## d,         0, NULL); \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ##.dll),   "realloc",         (FUNCPTR)safer_scalable_realloc_ ## CRT_VER,              0, NULL); \
     ReplaceFunctionWithStore( __TBB_QV(CRT_VER ## d.dll), "_aligned_free",   (FUNCPTR)safer_scalable_free_ ## CRT_VER ## d,            0, NULL); \
@@ -257,6 +275,8 @@ __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr80);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90);
+__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100d);
+__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100);
 
 
 /*** replacements for global operators new and delete ***/
@@ -302,6 +322,8 @@ void operator_delete_arr_t(void* ptr, const std::nothrow_t&) throw() {
 }
 
 const char* modules_to_replace[] = {
+    "msvcr100d.dll",
+    "msvcr100.dll",
     "msvcr80d.dll",
     "msvcr80.dll",
     "msvcr90d.dll",
@@ -365,12 +387,12 @@ FRDATA routines_to_replace[] = {
 };
 
 #ifndef UNICODE
-void ReplaceFunctionWithStore( const char*dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc )
+void ReplaceFunctionWithStore( const char*dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc )
 #else
-void ReplaceFunctionWithStore( const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc )
+void ReplaceFunctionWithStore( const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc )
 #endif
 {
-    FRR_TYPE type = ReplaceFunction( dllName, funcName, newFunc, opcodesNumber, origFunc );
+    FRR_TYPE type = ReplaceFunction( dllName, funcName, newFunc, opcodes, origFunc );
     if (type == FRR_NODLL) return;
     if ( type != FRR_OK )
     {
@@ -405,6 +427,7 @@ void doMallocReplacement()
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr71)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr80)
     __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr90)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr100)
 }
 
 extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID reserved )
diff --git a/src/tbbmalloc/proxy.h b/src/tbbmalloc/proxy.h
index 8a12fc6..315f628 100644
--- a/src/tbbmalloc/proxy.h
+++ b/src/tbbmalloc/proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/tbb_function_replacement.cpp b/src/tbbmalloc/tbb_function_replacement.cpp
index f4b0d92..818c5ac 100644
--- a/src/tbbmalloc/tbb_function_replacement.cpp
+++ b/src/tbbmalloc/tbb_function_replacement.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,11 +29,17 @@
 //We works on windows only
 #ifdef _WIN32
 #define _CRT_SECURE_NO_DEPRECATE 1
+#define __TBB_NO_IMPLICIT_LINKAGE 1
 
 #include <windows.h>
 #include <new>
+#include <stdio.h>
 #include "tbb_function_replacement.h"
 
+#include "tbb/tbb_config.h"
+#include "tbb/tbb_stddef.h"
+#include "../tbb/tbb_assert_impl.h"
+
 inline UINT_PTR Ptr2Addrint(LPVOID ptr)
 {
     Int2Ptr i2p;
@@ -178,10 +184,70 @@ private:
 
 static MemoryProvider memProvider;
 
+// Compare opcodes from dictionary (str1) and opcodes from code (str2)
+// str1 might contain '*' to mask adresses
+// RETURN: NULL if opcodes did not match, string lentgh of str1 on success
+size_t compareStrings( const char *str1, const char *str2 )
+{
+   size_t str1Lentgh = strlen(str1);
+   for (size_t i=0; i<str1Lentgh; i++){
+       if( str1[i] != '*' && str1[i] != str2[i] ) return NULL;
+   }
+   return str1Lentgh;
+}
+
+// Check function prologue with know prologues from the dictionary
+// opcodes - dictionary
+// inpAddr - pointer to function prologue
+// Dictionary contains opcodes for several full asm instrutions
+// + one opcode byte for the next asm instruction for safe address processing
+// RETURN: number of bytes for safe bytes replacement 
+// (matched_pattern/2-1)
+UINT CheckOpcodes( const char ** opcodes, void *inpAddr )
+{
+    static size_t opcodesStringsCount = 0;
+    static size_t maxOpcodesLength = 0;
+    static size_t opcodes_pointer = (size_t)opcodes;
+    char opcodeString[61];
+    size_t i;
+    size_t result;
+
+    // Get the values for static variables
+    // max length and number of patterns
+    if( !opcodesStringsCount || opcodes_pointer != (size_t)opcodes ){
+        while( *(opcodes + opcodesStringsCount)!= NULL ){
+            if( (i=strlen(*(opcodes + opcodesStringsCount))) > maxOpcodesLength ) 
+                maxOpcodesLength = i;
+            opcodesStringsCount++;
+        }
+        opcodes_pointer = (size_t)opcodes;
+        __TBB_ASSERT( maxOpcodesLength < 61, "Limit is 30 opcodes/60 symbols per pattern" );
+    }
+
+    // Translate prologue opcodes to string format to compare
+    for( i=0; i< maxOpcodesLength/2; i++ ){
+        sprintf( opcodeString + 2*i, "%.2X", *((unsigned char*)inpAddr+i) ); 
+    }
+    opcodeString[maxOpcodesLength] = 0;
+    
+    // Compare translated opcodes with patterns
+    for( i=0; i< opcodesStringsCount; i++ ){
+        result = compareStrings( opcodes[i],opcodeString );
+        if( result ) 
+            return (UINT)(result/2-1);
+    }
+    // TODO: to add more stuff to patterns
+    __TBB_ASSERT( NULL, "CheckOpcodes failed" );
+
+    // No matches found just do not store original calls
+    return 0;
+}
+
 // Insert jump relative instruction to the input address
 // RETURN: the size of the trampoline or 0 on failure
-static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, UINT opcodesNumber, FUNCPTR* storedAddr)
+static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, const char ** opcodes, FUNCPTR* storedAddr)
 {
+    UINT opcodesNumber = SIZE_OF_RELJUMP;
     UINT_PTR srcAddr = Ptr2Addrint(inpAddr);
     UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);
     // Check that the target fits in 32 bits
@@ -194,20 +260,26 @@ static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, UINT opcodesNum
 
     // If requested, store original function code
     if ( storedAddr ){
-        UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
-        if (!strdAddr)
-            return 0;
-        *storedAddr = (FUNCPTR)Addrint2Ptr(strdAddr);
-        // Set 'executable' flag for original instructions in the new place
-        DWORD pageFlags = PAGE_EXECUTE_READWRITE;
-        if (!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;
-        // Copy original instructions to the new place
-        memcpy(*storedAddr, codePtr, opcodesNumber);
-        // Set jump to the code after replacement
-        offset = srcAddr - strdAddr - SIZE_OF_RELJUMP;
-        offset32 = (UINT)((offset & 0xFFFFFFFF));
-        *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
-        memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
+        opcodesNumber = CheckOpcodes( opcodes, inpAddr );
+        if( opcodesNumber >= SIZE_OF_RELJUMP ){
+            UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
+            if (!strdAddr)
+                return 0;
+            *storedAddr = (FUNCPTR)Addrint2Ptr(strdAddr);
+            // Set 'executable' flag for original instructions in the new place
+            DWORD pageFlags = PAGE_EXECUTE_READWRITE;
+            if(!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;
+            // Copy original instructions to the new place
+            memcpy(*storedAddr, codePtr, opcodesNumber);
+            // Set jump to the code after replacement
+            offset = srcAddr - strdAddr - SIZE_OF_RELJUMP;
+            offset32 = (UINT)((offset & 0xFFFFFFFF));
+            *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
+            memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
+        }else{
+            // No matches found just do not store original calls
+            *storedAddr = NULL;
+        }
     }
 
     // The following will work correctly even if srcAddr>tgtAddr, as long as
@@ -231,8 +303,10 @@ static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr, UINT opcodesNum
 // 2  Put jump RIP relative indirect through the address in the close page
 // 3  Put the absolute address of the target in the allocated location
 // RETURN: the size of the trampoline or 0 on failure
-static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, UINT opcodesNumber, FUNCPTR* storedAddr)
+static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, const char ** opcodes, FUNCPTR* storedAddr)
 {
+    UINT opcodesNumber = SIZE_OF_INDJUMP;
+
     UINT_PTR srcAddr = Ptr2Addrint(inpAddr);
     UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);
 
@@ -251,20 +325,26 @@ static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, UINT opcodesNum
 
     // If requested, store original function code
     if( storedAddr ){
-        UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
-        if (!strdAddr)
-            return 0;
-        *storedAddr = (FUNCPTR)Addrint2Ptr(strdAddr);
-        // Set 'executable' flag for original instructions in the new place
-        DWORD pageFlags = PAGE_EXECUTE_READWRITE;
-        if (!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;
-        // Copy original instructions to the new place
-        memcpy(*storedAddr, codePtr, opcodesNumber);
-        // Set jump to the code after replacement. It is within the distance of relative jump!
-        offset = srcAddr - strdAddr - SIZE_OF_RELJUMP;
-        offset32 = (UINT)((offset & 0xFFFFFFFF));
-        *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
-        memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
+        opcodesNumber = CheckOpcodes( opcodes, inpAddr );
+        if( opcodesNumber >= SIZE_OF_INDJUMP ){
+            UINT_PTR strdAddr = memProvider.GetLocation(srcAddr);
+            if (!strdAddr)
+                return 0;
+            *storedAddr = (FUNCPTR)Addrint2Ptr(strdAddr);
+            // Set 'executable' flag for original instructions in the new place
+            DWORD pageFlags = PAGE_EXECUTE_READWRITE;
+            if (!VirtualProtect(*storedAddr, MAX_PROBE_SIZE, pageFlags, &pageFlags)) return 0;
+            // Copy original instructions to the new place
+            memcpy(*storedAddr, codePtr, opcodesNumber);
+            // Set jump to the code after replacement. It is within the distance of relative jump!
+            offset = srcAddr - strdAddr - SIZE_OF_RELJUMP;
+            offset32 = (UINT)((offset & 0xFFFFFFFF));
+            *((UCHAR*)*storedAddr+opcodesNumber) = 0xE9;
+            memcpy(((UCHAR*)*storedAddr+opcodesNumber+1), &offset32, sizeof(offset32));
+        }else{
+            // No matches found just do not store original calls
+            *storedAddr = NULL;
+        }
     }
 
     // Fill the buffer
@@ -288,16 +368,16 @@ static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr, UINT opcodesNum
 // 3. Call InsertTrampoline32 or InsertTrampoline64
 // 4. Restore memory protection
 // RETURN: FALSE on failure, TRUE on success
-static bool InsertTrampoline(void *inpAddr, void *targetAddr, UINT opcodesNumber, FUNCPTR* origFunc)
+static bool InsertTrampoline(void *inpAddr, void *targetAddr, const char ** opcodes, FUNCPTR* origFunc)
 {
     DWORD probeSize;
     // Change page protection to EXECUTE+WRITE
     DWORD origProt = 0;
     if (!VirtualProtect(inpAddr, MAX_PROBE_SIZE, PAGE_EXECUTE_WRITECOPY, &origProt))
         return FALSE;
-    probeSize = InsertTrampoline32(inpAddr, targetAddr, opcodesNumber, origFunc);
+    probeSize = InsertTrampoline32(inpAddr, targetAddr, opcodes, origFunc);
     if (!probeSize)
-        probeSize = InsertTrampoline64(inpAddr, targetAddr, opcodesNumber, origFunc);
+        probeSize = InsertTrampoline64(inpAddr, targetAddr, opcodes, origFunc);
 
     // Restore original protection
     VirtualProtect(inpAddr, MAX_PROBE_SIZE, origProt, &origProt);
@@ -313,7 +393,7 @@ static bool InsertTrampoline(void *inpAddr, void *targetAddr, UINT opcodesNumber
 
 // Routine to replace the functions
 // TODO: replace opcodesNumber with opcodes and opcodes number to check if we replace right code.
-FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc)
+FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc)
 {
     // Cache the results of the last search for the module
     // Assume that there was no DLL unload between 
@@ -345,7 +425,7 @@ FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR new
         return FRR_NOFUNC;
     }
 
-    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodesNumber, origFunc)){
+    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodes, origFunc)){
         // Failed to insert the trampoline to the target address
         return FRR_FAILED;
     }
@@ -353,7 +433,7 @@ FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR new
     return FRR_OK;
 }
 
-FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc)
+FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc)
 {
     // Cache the results of the last search for the module
     // Assume that there was no DLL unload between 
@@ -385,7 +465,7 @@ FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR
         return FRR_NOFUNC;
     }
 
-    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodesNumber, origFunc)){
+    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc, opcodes, origFunc)){
         // Failed to insert the trampoline to the target address
         return FRR_FAILED;
     }
diff --git a/src/tbbmalloc/tbb_function_replacement.h b/src/tbbmalloc/tbb_function_replacement.h
index 28a8248..a0af43b 100644
--- a/src/tbbmalloc/tbb_function_replacement.h
+++ b/src/tbbmalloc/tbb_function_replacement.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -49,8 +49,8 @@ typedef void (*FUNCPTR)();
 #define ReplaceFunction ReplaceFunctionW
 #endif //UNICODE
 
-FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc=NULL);
-FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, UINT opcodesNumber, FUNCPTR* origFunc=NULL);
+FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);
+FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc, const char ** opcodes, FUNCPTR* origFunc=NULL);
 
 // Utilities to convert between ADDRESS and LPVOID
 union Int2Ptr {
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index e9bc808..e585684 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,6 +30,14 @@
 
 #include "tbb/itt_notify.cpp"
 
+#undef UNICODE
+
+#if USE_PTHREAD
+#include <dlfcn.h>
+#elif USE_WINTHREAD
+#include <windows.h>
+#endif
+
 #if MALLOC_CHECK_RECURSION
 
 #include <pthread.h>
@@ -91,6 +99,25 @@ void MallocInitializeITT() {
 }
 #endif /* DO_ITT_NOTIFY */
 
+#if TBB_USE_DEBUG
+#define DEBUG_SUFFIX "_debug"
+#else
+#define DEBUG_SUFFIX
+#endif /* TBB_USE_DEBUG */
+
+// MALLOCLIB_NAME is the name of the TBB memory allocator library.
+#if _WIN32||_WIN64
+#define MALLOCLIB_NAME "tbbmalloc" DEBUG_SUFFIX ".dll"
+#elif __APPLE__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
+#elif __linux__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
+#elif __FreeBSD__ || __sun
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
+#else
+#error Unknown OS
+#endif
+
 void init_tbbmalloc() {
 #if MALLOC_LD_PRELOAD
     if (malloc_proxy && __TBB_internal_find_original_malloc) {
@@ -116,6 +143,18 @@ void init_tbbmalloc() {
 #if DO_ITT_NOTIFY
     MallocInitializeITT();
 #endif
+
+/* Preventing TBB allocator library from unloading to prevent
+   resource leak, as memory is not released on the library unload.
+*/
+#if USE_PTHREAD
+    dlopen(MALLOCLIB_NAME, RTLD_NOW);
+#elif USE_WINTHREAD
+    // Prevent Windows from displaying message boxes if it fails to load library
+    UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
+    LoadLibrary(MALLOCLIB_NAME);
+    SetErrorMode (prev_mode);
+#endif /* USE_PTHREAD */
 }
 
 #if !(_WIN32||_WIN64)
@@ -164,6 +203,7 @@ void __TBB_internal_free(void *object)
 } /* extern "C" */
 
 #endif /* MALLOC_LD_PRELOAD */
+
 #endif /* MALLOC_CHECK_RECURSION */
 
 } } // namespaces
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
index 89830eb..1aba798 100644
--- a/src/tbbmalloc/tbbmalloc.rc
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -93,7 +93,7 @@ BEGIN
             VALUE "FileDescription", "Scalable Allocator library\0"
             VALUE "FileVersion", TBBMALLOC_VERSION "\0"
 //what is it?            VALUE "InternalName", "tbbmalloc\0"
-            VALUE "LegalCopyright", "Copyright 2005-2009 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2010 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbbmalloc.dll\0"
diff --git a/src/tbbmalloc/win-gcc-tbbmalloc-export.def b/src/tbbmalloc/win-gcc-tbbmalloc-export.def
index 0e55b4d..96c2631 100644
--- a/src/tbbmalloc/win-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win-gcc-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     The source code contained or described herein and all documents related
     to the source code ("Material") are owned by Intel Corporation or its
diff --git a/src/tbbmalloc/win32-tbbmalloc-export.def b/src/tbbmalloc/win32-tbbmalloc-export.def
index e040263..798879e 100644
--- a/src/tbbmalloc/win32-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbmalloc/win64-tbbmalloc-export.def b/src/tbbmalloc/win64-tbbmalloc-export.def
index e040263..798879e 100644
--- a/src/tbbmalloc/win64-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/test/harness.h b/src/test/harness.h
index d8b4a45..b8e2aff 100644
--- a/src/test/harness.h
+++ b/src/test/harness.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,28 +28,58 @@
 
 // Declarations for rock-bottom simple test harness.
 // Just include this file to use it.
-// Every test is presumed to have a command line of the form "foo [-v] [nthread]"
-// The default for nthread is 2.
+// Every test is presumed to have a command line of the form "test [-v] [MinThreads[:MaxThreads]]"
+// The default for MinThreads is 1, for MaxThreads 4.
+// The defaults can be overridden by defining macros HARNESS_DEFAULT_MIN_THREADS
+// and HARNESS_DEFAULT_MAX_THREADS before including harness.h
 
 #ifndef tbb_tests_harness_H
 #define tbb_tests_harness_H
 
+namespace Harness {
+    enum TestResult {
+        Done,
+        Skipped
+    };
+}
+
+//! Entry point to a TBB unit test application
+/** It MUST be defined by the test application.
+    
+    If HARNESS_NO_PARSE_COMMAND_LINE macro was not explicitly set before including harness.h,
+    then global variables Verbose, MinThread, and MaxThread will be available and 
+    initialized when it is called.
+
+    Returns Harness::Done when the tests passed successfully. When the test fail, it must 
+    not return, calling exit(errcode) or abort() instead. When the test is not supported 
+    for the given platform/compiler/etc, it should return Harness::Skipped.
+    
+    To provide non-standard variant of main() for the test, define HARNESS_CUSTOM_MAIN
+    before including harness.h **/
+int TestMain ();
+
 #define __TBB_LAMBDAS_PRESENT  ( _MSC_VER >= 1600 && !__INTEL_COMPILER || __INTEL_COMPILER > 1100 && _TBB_CPP0X )
 
+#if defined(_MSC_VER) && _MSC_VER < 1400
+    #define __TBB_EXCEPTION_TYPE_INFO_BROKEN 1
+#else
+    #define __TBB_EXCEPTION_TYPE_INFO_BROKEN 0
+#endif
+
 #if __SUNPRO_CC
-#include <stdlib.h>
-#include <string.h>
+    #include <stdlib.h>
+    #include <string.h>
 #else
-#include <cstdlib>
-#include <cstring>
+    #include <cstdlib>
+    #include <cstring>
 #endif
 #include <new>
 
 #if __LRB__
-#include "harness_lrb.h"
+    #include "harness_lrb.h"
 #else
-#define __TBB_TEST_EXPORT
-#define REPORT_FATAL_ERROR REPORT
+    #define __TBB_TEST_EXPORT
+    #define REPORT_FATAL_ERROR REPORT
 #endif /* !__LRB__ */
 
 #if _WIN32||_WIN64
@@ -59,8 +89,8 @@
     #include <pthread.h>
 #endif
 #if __linux__
-#include <sys/utsname.h> /* for uname */
-#include <errno.h>       /* for use in LinuxKernelVersion() */
+    #include <sys/utsname.h> /* for uname */
+    #include <errno.h>       /* for use in LinuxKernelVersion() */
 #endif
 
 #include "harness_report.h"
@@ -102,18 +132,26 @@ void ReportWarning( const char* filename, int line, const char* expression, cons
 #endif /* HARNESS_NO_ASSERT */
 
 #if !HARNESS_NO_PARSE_COMMAND_LINE
-//! Controls level of commentary.
+
+//! Controls level of commentary printed via printf-like REMARK() macro.
 /** If true, makes the test print commentary.  If false, test should print "done" and nothing more. */
 static bool Verbose;
 
+#ifndef HARNESS_DEFAULT_MIN_THREADS
+    #define HARNESS_DEFAULT_MIN_THREADS 1
+#endif
+
 //! Minimum number of threads
-/** The default is 0, which is typically interpreted by tests as "run without TBB". */
-static int MinThread = 0;
+static int MinThread = HARNESS_DEFAULT_MIN_THREADS;
+
+#ifndef HARNESS_DEFAULT_MAX_THREADS
+    #define HARNESS_DEFAULT_MAX_THREADS 4
+#endif
 
 //! Maximum number of threads
-static int MaxThread = 2;
+static int MaxThread = HARNESS_DEFAULT_MAX_THREADS;
 
-//! Parse command line of the form "name [-v] [nthread]"
+//! Parse command line of the form "name [-v] [MinThreads[:MaxThreads]]"
 /** Sets Verbose, MinThread, and MaxThread accordingly.
     The nthread argument can be a single number or a range of the form m:n.
     A single number m is interpreted as if written m:m. 
@@ -163,6 +201,23 @@ static void ParseCommandLine( int argc, char* argv[] ) {
 }
 #endif /* HARNESS_NO_PARSE_COMMAND_LINE */
 
+#if !HARNESS_CUSTOM_MAIN
+
+__TBB_TEST_EXPORT
+#if HARNESS_NO_PARSE_COMMAND_LINE
+int main() {
+#else
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+#endif
+    int res = TestMain ();
+    ASSERT( res==Harness::Done || res==Harness::Skipped, "Wrong return code by TestMain");
+    REPORT( res==Harness::Done ? "done\n" : "skip\n" );
+    return 0;
+}
+
+#endif /* !HARNESS_CUSTOM_MAIN */
+
 //! Base class for prohibiting compiler-generated operator=
 class NoAssign {
     //! Assignment not allowed
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
index db335b4..bf6d15c 100644
--- a/src/test/harness_allocator.h
+++ b/src/test/harness_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_assert.h b/src/test/harness_assert.h
index bc21edb..0fecbd5 100644
--- a/src/test/harness_assert.h
+++ b/src/test/harness_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 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 ce9591a..9fdb089 100644
--- a/src/test/harness_bad_expr.h
+++ b/src/test/harness_bad_expr.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_barrier.h b/src/test/harness_barrier.h
index cbb6dd1..78d7c76 100644
--- a/src/test/harness_barrier.h
+++ b/src/test/harness_barrier.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_concurrency_tracker.h b/src/test/harness_concurrency_tracker.h
index 61caede..5a5fa88 100644
--- a/src/test/harness_concurrency_tracker.h
+++ b/src/test/harness_concurrency_tracker.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_cpu.h b/src/test/harness_cpu.h
index ca27b18..84fa1a7 100644
--- a/src/test/harness_cpu.h
+++ b/src/test/harness_cpu.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,10 +31,10 @@
 // It assumes that "harness_assert.h" has already been included.
 
 #if _WIN32
-#include <windows.h>
+    #include <windows.h>
 #else
-#include <sys/time.h>
-#include <sys/resource.h>
+    #include <sys/time.h>
+    #include <sys/resource.h>
 #endif
 
 //! Return time (in seconds) spent by the current process in user mode.
@@ -76,12 +76,13 @@ static void TestCPUUserTime( int nthreads, int nactive = 1 ) {
     // The test will always pass on Linux; read the comments in GetCPUUserTime for details
     // Also it will not detect spinning issues on systems with only one processing core.
 
-    static double minimal_waittime = WAITTIME;
     int nworkers = nthreads-nactive;
     if( !nworkers ) return;
+    double lastusrtime = GetCPUUserTime();
+    if( !lastusrtime ) return;
 
+    static double minimal_waittime = WAITTIME;
     double usrtime;
-    double lastusrtime = GetCPUUserTime();
     while( (usrtime=GetCPUUserTime())-lastusrtime < THRESHOLD )
         ; // wait for GetCPUUserTime update
     lastusrtime = usrtime;
diff --git a/src/test/harness_eh.h b/src/test/harness_eh.h
index 9650688..6fa617d 100644
--- a/src/test/harness_eh.h
+++ b/src/test/harness_eh.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,7 +39,7 @@ namespace Harness {
     typedef pthread_t tid_t;
     tid_t CurrentTid () { return pthread_self(); }
 #endif /* !WIN */
-} // namespace util
+} // namespace Harness
 
 int g_NumThreads = 0;
 Harness::tid_t  g_Master = 0;
@@ -122,8 +122,9 @@ static void ThrowTestException ( intptr_t threshold ) {
 #define CATCH()     \
     } catch ( PropagatedException& e ) { \
         g_ExecutedAtCatch = g_CurExecuted; \
-        ASSERT (strcmp(EXCEPTION_NAME(e), (g_SolitaryException ? typeid(solitary_test_exception) : typeid(test_exception)).name() ) == 0, "Unexpected original exception name"); \
-        ASSERT (strcmp(e.what(), EXCEPTION_DESCR) == 0, "Unexpected original exception info"); \
+        ASSERT( e.what(), "Empty what() string" );  \
+        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(EXCEPTION_NAME(e), (g_SolitaryException ? typeid(solitary_test_exception) : typeid(test_exception)).name() ) == 0, "Unexpected original exception name"); \
+        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR) == 0, "Unexpected original exception info"); \
         g_ExceptionCaught = exceptionCaught = true; \
         ++g_Exceptions; \
     } catch ( tbb::tbb_exception& e ) { \
@@ -143,7 +144,7 @@ static void ThrowTestException ( intptr_t threshold ) {
     ASSERT (g_ExceptionsThrown ? g_ExceptionCaught : true, "throw without catch"); \
     ASSERT (!g_ExceptionsThrown ? !g_ExceptionCaught : true, "catch without throw"); \
     ASSERT (g_ExceptionCaught, "no exception occurred"); \
-    ASSERT (!g_UnknownException, "unknown exception was caught")
+    ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, "unknown exception was caught")
 
 #define CATCH_AND_ASSERT() \
     CATCH() \
diff --git a/src/test/harness_iterator.h b/src/test/harness_iterator.h
index cc20b0f..c3dbd02 100644
--- a/src/test/harness_iterator.h
+++ b/src/test/harness_iterator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_lrb.h b/src/test/harness_lrb.h
index 5bda198..3dd2b36 100644
--- a/src/test/harness_lrb.h
+++ b/src/test/harness_lrb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,6 +33,9 @@
     #error test/harness_lrb.h should be included only when building for LRB platform
 #endif
 
+#include <stdlib.h>
+#include <stdio.h>
+
 #define __TBB_LRB_COMM_MSG_SIZE_MAX 1024
 #define __TBB_LRB_COMMUNICATOR_NAME "__TBB_LRB_COMMUNICATOR"
 
@@ -40,24 +43,171 @@
 #define __TBB_MSG_SKIP "skip\n"
 #define __TBB_MSG_ABORT "__TBB_abort__"
 
+#define XNCALL(X) \
+    { \
+        XNERROR result = (X); \
+        if (XN_SUCCESS != result) \
+        { \
+        printf("ERROR: Call to %s\n\t at line %d of %s\n\t failed with code %s\n", # X, __LINE__, __FILE__, XN0ErrorGetName(result)); fflush(0); \
+            ASSERT(false, 0); \
+        } \
+    }
+
+
+#define INTCALL(X) \
+    { \
+        int result = (X); \
+        if (0 != result) \
+        { \
+        printf("ERROR: Call to %s\n\t at line %d of %s\n\t failed with value %d\n", # X, __LINE__, __FILE__, result); fflush(0); \
+            ASSERT(false, 0); \
+        } \
+    }
+
 #if __TBB_LRB_HOST
 
 #include "host/XN0_host.h"
 
 #else /* !__TBB_LRB_HOST */
 
+#if __TBB_LRB_NO_XN // no LRB launcher needed
+#define REPORT_FATAL_ERROR  REPORT
+#define __TBB_TEST_EXPORT
+#else
+
 #include "lrb/XN0_lrb.h"
-#include <assert.h>
+#include "harness_assert.h"
 
-#define __TBB_STDARGS_BROKEN 1
-#define __TBB_TEST_EXPORT XNNATIVELIBEXPORT
+#if !__TBB_LRB_OLD_LAUNCHER // new launcher from LRB Tutorial
 
-#if XENSIM || __TBB_LRB_NATIVE
-    #define __TBB_EXCEPTION_HANDLING_BROKEN 1
-    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1
-    #define __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN 1
-#endif /* XENSIM || __TBB_LRB_NATIVE */
+#define __TBB_TEST_EXPORT
+
+#ifndef _WIN32
+#include <unistd.h> // Needed for usleep
+#include <dlfcn.h>
+#include <string.h>
+#endif
+
+#ifndef HARNESS_NO_MAIN_ARGS
+#define HARNESS_NO_MAIN_ARGS HARNESS_NO_PARSE_COMMAND_LINE
+#endif
+#if HARNESS_NO_MAIN_ARGS
+int main();
+#else
+int main(int, char**);
+#endif
+
+typedef int 
+(*Main2FunctionPtr_t)(
+    int     argc,
+    char**  argv);
+
+typedef struct 
+{
+    int                 argc;
+    char**              argv;
+    Main2FunctionPtr_t  mainPtr;
+} main_wrapper_t;
+
+static pthread_t g_mainThread;
+XNEVENT g_mainExitedSyncObj;
+
+#define REPORT_FATAL_ERROR  signalExited(-1); REPORT
+
+void signalExited(int Res) {
+    fflush(0); // workaraund for LRB printf bug
+    // Store the value main returned in the sync object used to
+    // signal main has exited, then signal the sync object
+    XNCALL(XN0SyncObjectSetUserData(g_mainExitedSyncObj, (int64_t) Res));
+    XNCALL(XN0EventSet(g_mainExitedSyncObj));
+}
+
+// Wrapper function used to keep track of whether main has returned or not.
+void* mainWrapperFn(void* in_mainInput)
+{
+    main_wrapper_t* pWrapper = static_cast<main_wrapper_t*>(in_mainInput);
+    int mainResult = pWrapper->mainPtr(pWrapper->argc, pWrapper->argv);
+    signalExited( mainResult );
+
+    return NULL;
+} /* mainWrapperFn() */
 
+// Argc and argv are encoded in the in_pMiscData - the argc is at the start,
+// the rest of it is argv.
+extern "C" XNNATIVELIBEXPORT void 
+SpawnMain(
+    XN_BUFFER_LIST  in_bufList,
+    void*           in_pMiscData, 
+    uint16_t        in_pMiscDataSize)
+{
+    UNREFERENCED_PARAM(in_bufList);
+
+    // First thing we do is register the sync object that will
+    // be used to signal when main exits
+    XNCALL(XN0EventCreate( XN_NOT_SIGNALED, XN_AUTO_RESET, &g_mainExitedSyncObj));
+    XNCALL(XN0SyncObjectRegister( g_mainExitedSyncObj, 
+        "/Intel/Larrabee SDK Core/mainExitedSyncObj"));
+
+    main_wrapper_t* pMainWrapper = static_cast<main_wrapper_t*>(
+        malloc(sizeof(main_wrapper_t)));
+    ASSERT(NULL != pMainWrapper, 0);
+
+    // Figure out how many/how long the argv arguments are and build up
+    // an argv buffer.
+    pMainWrapper->argc = *(static_cast<int32_t*>(in_pMiscData));
+    pMainWrapper->argv = static_cast<char**>(malloc(pMainWrapper->argc * sizeof(char*)));
+    char* pCurrentArg = 4 + static_cast<char*>(in_pMiscData);
+    for (int i = 0; i < pMainWrapper->argc; i++)
+    {
+        int currentArgLen =  1 + (int) strlen(pCurrentArg); // Add 1 for null termination
+        pMainWrapper->argv[i] = static_cast<char*>(malloc(currentArgLen));
+#ifdef _WIN32
+        strcpy_s(pMainWrapper->argv[i], currentArgLen, pCurrentArg);
+#else
+        strncpy(pMainWrapper->argv[i], pCurrentArg, currentArgLen);
+#endif
+        pCurrentArg = pCurrentArg + currentArgLen;
+    }
+
+    // Sanity check to make sure length of buffer matches what we found via strlens.
+    ASSERT((pCurrentArg - static_cast<char*>(in_pMiscData)) == in_pMiscDataSize, 0);
+
+    pMainWrapper->mainPtr = reinterpret_cast<Main2FunctionPtr_t>(main);
+
+    pthread_attr_t attr;
+    INTCALL(pthread_attr_init(&attr));
+    // We want to be able to join the main thread to prove it is gone
+    INTCALL(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE));
+
+    INTCALL(pthread_create(&g_mainThread, &attr, mainWrapperFn, pMainWrapper));
+
+    pthread_set_name_np(g_mainThread, "main TBB test thread");
+    INTCALL(pthread_attr_destroy(&attr)); // Cleanup
+} /* StartMain() */
+
+extern "C" XNNATIVELIBEXPORT void
+RunForAQuantum(
+    XN_BUFFER_LIST  in_bufList,
+    void*           in_pMiscData, 
+    uint16_t        in_pMiscDataSize)
+{
+    UNREFERENCED_PARAM(in_bufList);
+
+    ASSERT(sizeof(uint32_t) == in_pMiscDataSize, 0);
+    uint32_t msToSleep = *static_cast<uint32_t*>(in_pMiscData);
+
+#ifdef _WIN32
+    // Windows emulation does not implement uSleep
+    Sleep((DWORD) msToSleep);
+#else
+    usleep(1000 * msToSleep); // usleep is in microseconds
+#endif
+} /* RunForAQuantum() */
+
+#else // __TBB_LRB_OLD_LAUNCHER
+
+#define __TBB_STDARGS_BROKEN 1
+#define __TBB_TEST_EXPORT XNNATIVELIBEXPORT
 namespace Harness {
     namespace internal {
 
@@ -85,11 +235,16 @@ namespace Harness {
 } // namespace Harness
 
 #define TbbHarnessReporter LrbReporter
-
 #define REPORT_FATAL_ERROR  REPORT(__TBB_MSG_ABORT); REPORT
+#endif // __TBB_LRB_OLD_LAUNCHER
+
+#endif//__TBB_LRB_NO_XN
 
 #if __TBB_LRB_NATIVE
     #define TBB_EXIT_ON_ASSERT 1
+    #define __TBB_EXCEPTION_HANDLING_BROKEN 1
+    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1
+    #define __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN 1
 #else
     #define TBB_TERMINATE_ON_ASSERT 1
 #endif
diff --git a/src/test/harness_lrb_host.cpp b/src/test/harness_lrb_host.cpp
index 5f62101..7d13550 100644
--- a/src/test/harness_lrb_host.cpp
+++ b/src/test/harness_lrb_host.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,20 +27,21 @@
 */
 
 /** @file harness_lrb_host.cpp     
-    This is the launcher for TBB tests compiled for LrbFSim or NetSim environments.
+    This is the launcher for TBB tests compiled for native or NetSim environments.
 **/
 
 #include <windows.h>
-#include <stdio.h>
-#include <assert.h>
 
 #define __TBB_LRB_HOST 1
 #include "harness_lrb.h"
-
-#define __TBB_HOST_EXIT(status)  exitStatus = status; goto hard_stop;
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#define HARNESS_CUSTOM_MAIN 1
+#include "harness.h"
+#include <assert.h>
 
 bool IsSupportedTest ( int argc, char* argv[] ) {
     const char* test[] = {
+        "test_openmp", 
         "test_model_plugin", 
         "test_tbb_version",
         "malloc_overload",
@@ -55,6 +56,180 @@ bool IsSupportedTest ( int argc, char* argv[] ) {
     return true;
 }
 
+#if !__TBB_LRB_OLD_LAUNCHER
+
+char* ConfigAndExt();
+
+XNERROR LoadNativeAppWrapper(
+    const char* pTestName,
+    XNCONTEXT*  out_pContext,
+    XNLIBRARY*  out_pLibrary)
+{
+    XNERROR result = XN_SUCCESS;
+
+    UINT32 NumberOfEngines = XN0EngineGetCount1( XN_ISA_LRB1, NULL );
+    if (0 == NumberOfEngines)
+    {
+        printf("ERROR: No Larrabee card detected\n");
+        result = XN_NOT_INITIALIZED;
+        goto end;
+    }
+
+    XNENGINE engine;
+    XNCALL(XN0EngineGetHandle1( XN_ISA_LRB1, NULL, 0, &engine ));
+
+    XNCALL(XN0ContextCreate1(engine, out_pContext));
+
+    char path[MAX_PATH];
+    DWORD pathLength = GetModuleFileNameA( NULL, path, MAX_PATH );
+    while ( path[--pathLength] != '\\' ) {};
+    path[++pathLength] = 0; // Terminate the string just after the path
+    char libName[MAX_PATH];
+    sprintf_s( libName, "%s%s", path, pTestName );
+    XNCALL(XN0ContextLoadLib3(*out_pContext, libName, 0, out_pLibrary));
+
+end:
+    return result;
+} /* LoadNativeAppWrapper() */
+
+
+XNERROR
+SpawnMain(
+    XNLIBRARY   in_pWrapperLibrary,
+    int         in_argc,
+    char**      in_ppArgv)
+{
+    XNERROR result = XN_SUCCESS;
+
+    XN_BUFFER_LIST bufList;
+    bufList.numBufs = 0;
+    bufList.pBufArray = NULL;
+
+    XNFUNCTION SpawnMainHandle;
+    XNCALL(XN0ContextGetLibFunctionHandle(in_pWrapperLibrary, "SpawnMain", &SpawnMainHandle));
+
+    // Argc and argv by the time they are passed into us count and point to
+    // the arguments to pass to the LRB native app's main.
+    // Calculate size of buffer needed to hold all args
+    int argBufLen = sizeof(int);
+    for (int i = 0; i < in_argc; i++)
+    {
+        argBufLen += (int) strnlen(in_ppArgv[i], 512);
+        argBufLen++; // Leave space for null termination
+    }
+    void* pArgBuffer = malloc(argBufLen);
+    assert(NULL != pArgBuffer);
+
+    // Place argc at the start of the buffer
+    *(int*) pArgBuffer = in_argc;
+    // Copy in the argvs to the rest of it
+    char* pCurrentArgBufPosition = &((static_cast<char*>(pArgBuffer))[4]);
+    int currentArgBufPosition = 4;
+    for (int i = 0; i < in_argc; i++)
+    {
+        strcpy_s(pCurrentArgBufPosition, 
+                 argBufLen - currentArgBufPosition,
+                 in_ppArgv[i]);
+        currentArgBufPosition += (int) strlen(in_ppArgv[i]);
+        currentArgBufPosition += 1; // For null termination byte
+        pCurrentArgBufPosition = pCurrentArgBufPosition + (int) strlen(in_ppArgv[i]) + 1;
+    }
+
+    XNCALL(XN0ContextRunFunction(SpawnMainHandle, bufList, pArgBuffer, (uint16_t) currentArgBufPosition));
+
+    free(pArgBuffer);
+
+    return result;
+} /* LoadNativeApp() */
+
+
+XNERROR
+WaitForNativeMainToExit(
+    int &out_Result,
+    XNLIBRARY   in_wrapperLibrary)
+{
+    XNFUNCTION RunForAQuantum;
+    XNCALL(XN0ContextGetLibFunctionHandle(in_wrapperLibrary, "RunForAQuantum", &RunForAQuantum));
+    /*
+    printf("Sending quanta of duration 10ms at frequency 10hz to allow main\n");
+    printf("to execute while waiting for it to exit\n\n");
+    printf("\tSending quanta:/");
+    */
+
+    // Look up the sync object the LRB side will set when main has exited
+    XNSYNCOBJECT mainExitedSyncObj;
+    while ( XN_DOES_NOT_EXIST == 
+        XN0SyncObjectLookup( 
+            "/Intel/Larrabee SDK Core/mainExitedSyncObj", &mainExitedSyncObj ) ) {};
+
+    XNERROR xnResult;
+    uint32_t quantaExecuted = 0;
+    do
+    {
+        XN_BUFFER_LIST bufList = { 0, NULL };
+        uint32_t quantum = 10; // Let native app run for 10ms at a time
+        XNCALL(XN0ContextRunFunction(RunForAQuantum, bufList, &quantum, sizeof(quantum)));
+        /*
+        switch(quantaExecuted++ % 4)
+        {
+            case 0: printf("\b-");break;
+            case 1: printf("\b\\");break;
+            case 2: printf("\b|");break;
+            case 3: printf("\b/");break;
+        }
+        */
+        Sleep(100); // Send 10 quanta per second
+        xnResult = XN0SyncObjectWaitWithTimeout(mainExitedSyncObj, 0);
+    } while (XN_SUCCESS != xnResult);
+
+    int64_t mainResult;
+    XNCALL(XN0SyncObjectGetUserData(mainExitedSyncObj, &mainResult));
+    XNCALL(XN0SyncObjectRelease(&mainExitedSyncObj, 1));
+
+    out_Result = int(mainResult);
+    return XN_SUCCESS;
+}
+
+XNERROR 
+Cleanup(
+    XNCONTEXT in_context,
+    XNLIBRARY in_wrapperLibrary)
+{
+    XNCALL(XN0ContextUnloadLib1(in_wrapperLibrary));
+    XNCALL(XN0ContextDestroy(in_context));
+    return XN_SUCCESS;
+} /* Cleanup() */
+
+
+int main(int argc, char** argv)
+{
+    int Result = 0;
+
+    if (argc < 2) {
+        printf( "Usage: %s test_name [test_args]\n", argv[0] );
+        return -1;
+    }
+    if ( !IsSupportedTest(argc, argv) ) {
+        printf(__TBB_MSG_SKIP);
+        return 0;
+    }
+
+    XNCONTEXT context;
+    XNLIBRARY wrapperLibrary;
+    XNCALL(LoadNativeAppWrapper(argv[1], &context, &wrapperLibrary));
+
+    XNCALL(SpawnMain(wrapperLibrary, argc-1, argv+1));
+
+    XNCALL(WaitForNativeMainToExit(Result, wrapperLibrary));
+
+    XNCALL(Cleanup(context, wrapperLibrary));
+
+    return Result;
+} /* main() */
+
+#else // __TBB_LRB_OLD_LAUNCHER
+#define __TBB_HOST_EXIT(status)  exitStatus = status; goto hard_stop;
+
 bool IsCompletionMsg ( const char* msg ) {
     return strncmp(msg, __TBB_MSG_DONE, __TBB_LRB_COMM_MSG_SIZE_MAX) == 0 ||
            strncmp(msg, __TBB_MSG_SKIP, __TBB_LRB_COMM_MSG_SIZE_MAX) == 0;
@@ -134,3 +309,4 @@ hard_stop:
     TerminateProcess( GetCurrentProcess(), 0 );
     return 0;
 }
+#endif // __TBB_LRB_OLD_LAUNCHER
diff --git a/src/test/harness_m128.h b/src/test/harness_m128.h
index e23ce53..62053b2 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,4 +31,49 @@
 #if (__SSE__||_M_IX86) && !defined(__sun)
 #include <xmmintrin.h>
 #define HAVE_m128 1
+
+//! Class for testing safety of using __m128
+/** Uses circuitous logic forces compiler to put __m128 objects on stack while
+    executing various methods, and thus tempt it to use aligned loads and stores
+    on the stack. */
+class ClassWithSSE {
+    static const int n = 16;
+    __m128 field[n];
+    void init( int start );
+public:
+    ClassWithSSE() {init(-n);} 
+    ClassWithSSE( int i ) {init(i);}
+    void operator=( const ClassWithSSE& src ) {
+        __m128 stack[n];
+        for( int i=0; i<n; ++i )
+            stack[i^5] = src.field[i];
+        for( int i=0; i<n; ++i )
+            field[i^5] = stack[i];
+    }
+    ~ClassWithSSE() {init(-2*n);}
+    friend bool operator==( const ClassWithSSE& x, const ClassWithSSE& y ) {
+        for( int i=0; i<4*n; ++i )
+            if( ((const float*)x.field)[i]!=((const float*)y.field)[i] )
+                return false;
+        return true;
+    }
+    friend bool operator!=( const ClassWithSSE& x, const ClassWithSSE& y ) {
+        return !(x==y);
+    }
+};
+
+void ClassWithSSE::init( int start ) {
+    __m128 stack[n];
+    for( int i=0; i<n; ++i ) {
+        // Declaring value as a one-element array instead of a scalar quites 
+        // gratuitous about possible use of "value" before it is used.
+        __m128 value[1];
+        for( int j=0; j<4; ++j )
+            ((float*)value)[j] = float(n*start+4*i+j);
+        stack[i^5] = value[0];
+    }
+    for( int i=0; i<n; ++i )
+        field[i^5] = stack[i];
+}
+
 #endif /* __SSE__||_M_IX86 */
diff --git a/src/test/harness_memory.h b/src/test/harness_memory.h
index 509b3a2..6f68e94 100644
--- a/src/test/harness_memory.h
+++ b/src/test/harness_memory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,7 +38,12 @@
 #elif __APPLE__
 #include <unistd.h>
 #include <mach/mach.h>
+#include <AvailabilityMacros.h>
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+#include <mach/shared_region.h>
+#else
 #include <mach/shared_memory_server.h>
+#endif
 #if SHARED_TEXT_REGION_SIZE || SHARED_DATA_REGION_SIZE
 const size_t shared_size = SHARED_TEXT_REGION_SIZE+SHARED_DATA_REGION_SIZE;
 #else
diff --git a/src/test/harness_report.h b/src/test/harness_report.h
index cbf0575..d91bfc1 100644
--- a/src/test/harness_report.h
+++ b/src/test/harness_report.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
index 18a04a7..cc66b35 100644
--- a/src/test/test_ScalableAllocator.cpp
+++ b/src/test/test_ScalableAllocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,8 +39,7 @@
 #include <windows.h>
 #endif /* _MSC_VER */
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
 #if _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE
     #ifdef _DEBUG
         ASSERT(!GetModuleHandle("tbbmalloc.dll") && GetModuleHandle("tbbmalloc_debug.dll"),
@@ -51,6 +50,6 @@ int main() {
     #endif
 #endif /* _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE */
     int result = TestMain<tbb::scalable_allocator<void> >();
-    REPORT("done\n");
-    return result;
+    ASSERT( !result, NULL );
+    return Harness::Done;
 }
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
index c54ad0a..34c6d3c 100644
--- a/src/test/test_ScalableAllocator_STL.cpp
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,9 +34,7 @@
 // The actual body of the test is there:
 #include "test_allocator_STL.h"
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
     TestAllocatorWithSTL<tbb::scalable_allocator<void> >();
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
index 9ac9e06..95d6c8e 100644
--- a/src/test/test_aligned_space.cpp
+++ b/src/test/test_aligned_space.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -99,8 +99,7 @@ void TestAlignedSpace() {
 
 #include "harness_m128.h"
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
     TestAlignedSpace<char>();
     TestAlignedSpace<short>();
     TestAlignedSpace<int>();
@@ -111,8 +110,7 @@ int main() {
 #if HAVE_m128
     TestAlignedSpace<__m128>();
 #endif /* HAVE_m128 */
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
 static void PrintSpaceWastingWarning( const char* type_name ) {
diff --git a/src/test/test_allocator.h b/src/test/test_allocator.h
index 948d1b5..d8a10e2 100644
--- a/src/test/test_allocator.h
+++ b/src/test/test_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_allocator_STL.h b/src/test/test_allocator_STL.h
index a879119..6b12bc3 100644
--- a/src/test/test_allocator_STL.h
+++ b/src/test/test_allocator_STL.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
index b2dcea1..6f5058a 100644
--- a/src/test/test_assembly.cpp
+++ b/src/test/test_assembly.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -139,7 +139,11 @@ static void TestTinyLock() {
 #endif
     __TBB_LockByte(flags[8]);
     for( int i=0; i<16; ++i )
+	#ifdef __sparc
+        ASSERT( flags[i]==(i==8?0xff:i), NULL );
+	#else
         ASSERT( flags[i]==(i==8?1:i), NULL );
+	#endif
 }
 
 static void TestLog2() {
@@ -167,10 +171,10 @@ static void TestPause() {
 
 using namespace tbb;
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
+int TestMain () {
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     try {
-        ParseCommandLine( argc, argv );
+#endif
         TestLog2();
         TestTinyLock();
         TestCompareExchange();
@@ -182,10 +186,10 @@ int main( int argc, char* argv[] ) {
         REMARK("testing __TBB_(scheduler assists)\n");
         GenericScheduler* scheduler = internal::Governor::local_scheduler();
         scheduler->test_assembly_routines();
-
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     } catch(...) {
         ASSERT(0,"unexpected exception");
     }
-    REPORT("done\n");
-    return 0;
+#endif
+    return Harness::Done;
 }
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
index 3ee79b7..2ac758e 100644
--- a/src/test/test_atomic.cpp
+++ b/src/test/test_atomic.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -462,9 +462,7 @@ class ArrayElement {
     char item[N];
 };
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
 #if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
     TestAtomicInteger<unsigned long long>("unsigned long long");
     TestAtomicInteger<long long>("long long");
@@ -502,8 +500,7 @@ int main( int argc, char* argv[] ) {
     ASSERT( !ParallelError, NULL );
     TestMaskedCAS<unsigned char>();
     TestMaskedCAS<unsigned short>();
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
 template<typename T>
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
index ed69cdf..386dba2 100644
--- a/src/test/test_blocked_range.cpp
+++ b/src/test/test_blocked_range.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -118,14 +118,11 @@ void ParallelTest() {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine(argc,argv);
+int TestMain () {
     SerialTest();
     for( int p=MinThread; p<=MaxThread; ++p ) {
         tbb::task_scheduler_init init(p);
         ParallelTest();
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_blocked_range2d.cpp b/src/test/test_blocked_range2d.cpp
index d6d3280..d13cc39 100644
--- a/src/test/test_blocked_range2d.cpp
+++ b/src/test/test_blocked_range2d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -146,14 +146,11 @@ void ParallelTest() {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine(argc,argv);
+int TestMain () {
     SerialTest();
     for( int p=MinThread; p<=MaxThread; ++p ) {
         tbb::task_scheduler_init init(p);
         ParallelTest();
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_blocked_range3d.cpp b/src/test/test_blocked_range3d.cpp
index 2b904be..48c1289 100644
--- a/src/test/test_blocked_range3d.cpp
+++ b/src/test/test_blocked_range3d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -95,21 +95,21 @@ static void SerialTest() {
                                     for( int colg=1; colg<4; ++colg ) {
                                         range_type r( pagei, pagej, pageg, rowi, rowj, rowg, coli, colj, colg );
                                         AssertSameType( r.is_divisible(), true );
-                                   
+
                                         AssertSameType( r.empty(), true );
-                                       
+
                                         AssertSameType( static_cast<range_type::page_range_type::const_iterator*>(0), static_cast<page_type*>(0) );
                                         AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );
                                         AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );
-                            
+
                                         AssertSameType( r.pages(), tbb::blocked_range<page_type>( pagei, pagej, 1 ));
                                         AssertSameType( r.rows(), tbb::blocked_range<row_type>( rowi, rowj, 1 ));
                                         AssertSameType( r.cols(), tbb::blocked_range<col_type>( coli, colj, 1 ));
-            
+
                                         ASSERT( r.empty()==(pagex==pagey||rowx==rowy||colx==coly), NULL );
-                         
+
                                         ASSERT( r.is_divisible()==(pagey-pagex>pageg||rowy-rowx>rowg||coly-colx>colg), NULL );
-                            
+
                                         if( r.is_divisible() ) {
                                             range_type r2(r,tbb::split());
                                             if( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin())) ) {
@@ -157,8 +157,8 @@ struct Striker {
 };
 
 void ParallelTest() {
-	for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
-          for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
+    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+        for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
             for( int k=0; k<N; k=k<3 ? k+1 : k*3 ) {
                 const tbb::blocked_range3d<int> r( 0, i, 5, 0, j, 3, 0, k, 1 );
                 tbb::parallel_for( r, Striker() );
@@ -177,14 +177,11 @@ void ParallelTest() {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine(argc,argv);
+int TestMain () {
     SerialTest(); 
-	    for( int p=MinThread; p<=MaxThread; ++p ) {
-            tbb::task_scheduler_init init(p);
-            ParallelTest();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        ParallelTest();
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
index 59865f7..cd207ca 100644
--- a/src/test/test_cache_aligned_allocator.cpp
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,12 +40,10 @@ struct is_zero_filling<tbb::zero_allocator<void> > {
     static const bool value = true;
 };
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
     int result = TestMain<tbb::cache_aligned_allocator<void> >();
     result += TestMain<tbb::tbb_allocator<void> >();
     result += TestMain<tbb::zero_allocator<void> >();
-
-    REPORT("done\n");
-    return result;
+    ASSERT( !result, NULL );
+    return Harness::Done;
 }
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
index b2922a1..7e9d167 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-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,12 +34,10 @@
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "test_allocator_STL.h"
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
     TestAllocatorWithSTL<tbb::cache_aligned_allocator<void> >();
     TestAllocatorWithSTL<tbb::tbb_allocator<void> >();
     TestAllocatorWithSTL<tbb::zero_allocator<void> >();
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_combinable.cpp b/src/test/test_combinable.cpp
index cee1e9b..9aac01c 100644
--- a/src/test/test_combinable.cpp
+++ b/src/test/test_combinable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,7 @@
     the GNU General Public License.
 */
 
+#define __TBB_EXTRA_DEBUG 1 // for concurrent_hash_map
 #include "tbb/combinable.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/parallel_for.h"
@@ -433,14 +434,10 @@ RunAssignmentAndCopyConstructorTests() {
     RunAssignmentAndCopyConstructorTest<minimal>("minimal");
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char *argv[]) {
-   ParseCommandLine(argc, argv);
-
-   if (MaxThread > 0) {
-      RunParallelTests();
-   }
-
+int TestMain () {
+    if (MaxThread > 0) {
+        RunParallelTests();
+    }
     RunAssignmentAndCopyConstructorTests();
     for(int i = 1 <= MinThread ? MinThread : 1; i <= MaxThread; ++i) {
         REMARK("Testing local() allocation with nthreads=%d\n", i);
@@ -448,8 +445,6 @@ int main(int argc, char *argv[]) {
             TestLocalAllocations(i);
         }
     }
-
-   REPORT("done\n");
-   return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_compiler.cpp b/src/test/test_compiler.cpp
index 827d427..039c000 100644
--- a/src/test/test_compiler.cpp
+++ b/src/test/test_compiler.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,23 +40,57 @@ union char2bool {
 // the value to 0 or 1 when the bool is cast to an unsigned char.
 // Compilers that pass this test do not do the normalization, and thus must
 // be assuming that a bool is a 0 or 1.
-int test_bool_representation() {
-    for( unsigned i=0; i<256; ++i ) {
+void TestBoolRepresentation () {
+    unsigned i = 0;
+    for( ; i<256; ++i ) {
         u.c = (unsigned char)i;
         unsigned char x = (unsigned char)u.b;
         if( x != i ) {
             REPORT("Test failed at iteration i=%d\n",i);
-            return 1;
+            break;
         }
     }
-    return 0;
+    ASSERT( i == 256, "bool representation differs from {0,1} set" );
 }
 
-__TBB_TEST_EXPORT
-int main() {
-    if( test_bool_representation()!=0 )
-        REPORT("ERROR: bool representation test failed\n");
-    else
-        REPORT("done\n");
-    return 0;
+// Test if all the necessary symbols are exported for the exceptions thrown by TBB.
+// Missing exports result either in link error or in runtime assertion failure.
+#include "tbb/tbb_exception.h"
+
+template <typename E>
+void TestExceptionClassExports ( const E& exc, tbb::internal::exception_id eid ) {
+    for ( int i = 0; i < 2; ++i ) {
+        try {
+            if ( i == 0 )
+                throw exc;
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+            else
+                tbb::internal::throw_exception( eid );
+#endif
+        }
+        catch ( E& e ) {
+            ASSERT ( e.what(), "Missing what() string" );
+        }
+        catch ( ... ) {
+            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception. Likely RTTI related exports are missing" );
+        }
+    }
+}
+
+void TestExceptionClassesExports () {
+    TestExceptionClassExports( std::bad_alloc(), tbb::internal::eid_bad_alloc );
+    TestExceptionClassExports( tbb::bad_last_alloc(), tbb::internal::eid_bad_last_alloc );
+    TestExceptionClassExports( std::invalid_argument("test"), tbb::internal::eid_nonpositive_step );
+    TestExceptionClassExports( std::out_of_range("test"), tbb::internal::eid_out_of_range );
+    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_segment_range_error );
+    TestExceptionClassExports( std::range_error("test"), tbb::internal::eid_index_range_error );
+    TestExceptionClassExports( tbb::missing_wait(), tbb::internal::eid_missing_wait );
+    TestExceptionClassExports( tbb::invalid_multiple_scheduling(), tbb::internal::eid_invalid_multiple_scheduling );
+    TestExceptionClassExports( tbb::improper_lock(), tbb::internal::eid_improper_lock );
+}
+
+int TestMain () {
+    TestBoolRepresentation();
+    TestExceptionClassesExports();
+    return Harness::Done;
 }
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index 001ecdd..6cf0ca2 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -49,12 +49,23 @@ namespace tbb {
         }
     } // namespace internal
 } // namespace tbb
-
+#define __TBB_EXTRA_DEBUG 1 // enables additional checks
 #include "tbb/concurrent_hash_map.h"
 
 // Restore runtime_warning as an entry point into the TBB library.
 #undef runtime_warning
 
+namespace Jungle {
+    struct Tiger {};
+    size_t tbb_hasher( const Tiger& ) {return 0;}
+}
+
+#if !defined(_MSC_VER) || _MSC_VER>=1400 || __INTEL_COMPILER
+void test_ADL() {
+    tbb::tbb_hash_compare<Jungle::Tiger>::hash(Jungle::Tiger()); // Instantiation chain finds tbb_hasher via Argument Dependent Lookup
+}
+#endif
+
 // 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;
@@ -738,6 +749,7 @@ void TestIteratorsAndRanges() {
     REMARK("testing construction and insertion from iterators range\n");
     FillTable( v, 1000 );
     MyTable2 t(v.begin(), v.end());
+    v.rehash();
     CheckTable(t, 1000);
     t.insert(v.begin(), v.end()); // do nothing
     CheckTable(t, 1000);
@@ -762,6 +774,29 @@ void TestIteratorsAndRanges() {
     ASSERT( t1 == t2, NULL);
 }
 
+void TestRehash() {
+    REMARK("testing rehashing\n");
+    MyTable v;
+    v.insert( std::make_pair(MyKey::make(-5), MyData()) );
+    v.rehash(); // without this, assertion will fail
+    MyTable::const_iterator it = v.begin();
+    int i = 0; // check for non-rehashed buckets
+    for( ; it != v.end(); ++it, i++ )
+        v.count( it->first );
+    ASSERT( i == 1, NULL );
+    for( int i=0; i<1000; i=(i<29 ? i+1 : i*2) ) {
+        for( int j=max(256+i, i*2); j<10000; j*=3 ) {
+            MyTable v;
+            FillTable( v, i );
+            ASSERT(int(v.size()) == i, NULL);
+            ASSERT(int(v.bucket_count()) <= j, NULL);
+            v.rehash( j );
+            ASSERT(int(v.bucket_count()) >= j, NULL);
+            CheckTable( v, i );
+        }
+    }
+}
+
 void TestExceptions() {
     typedef local_counting_allocator<tbb::tbb_allocator<MyData2> > allocator_t;
     typedef tbb::concurrent_hash_map<MyKey,MyData2,MyHashCompare,allocator_t> ThrowingTable;
@@ -821,6 +856,9 @@ void TestExceptions() {
                 }
                 REMARK("Exception %d: %s\t- ok ()\n", m, e.what());
             }
+            catch ( ... ) {
+                ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception" );
+            }
         }
     } catch(...) {
         ASSERT(false, "unexpected exception");
@@ -834,12 +872,7 @@ void TestExceptions() {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Default minimum number of threads is 1.
-    MinThread = 1;
-
-    ParseCommandLine(argc,argv);
+int TestMain () {
     if( MinThread<0 ) {
         REPORT("ERROR: must use at least one thread\n");
         exit(1);
@@ -848,6 +881,7 @@ int main( int argc, char* argv[] ) {
     // Do serial tests
     TestTypes();
     TestCopy();
+    TestRehash();
     TestAssignment();
     TestIteratorsAndRanges();
 #if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
@@ -865,6 +899,5 @@ int main( int argc, char* argv[] ) {
         tbb::internal::runtime_warning("none\nERROR: it must not be executed");
     }
 
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
index b0a3cf6..b6f3cc4 100644
--- a/src/test/test_concurrent_queue.cpp
+++ b/src/test/test_concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -60,7 +60,7 @@ public:
         thread_id=0xDEAD;
         serial=0xDEAD;
     }
-    void operator=( Foo& item ) {
+    void operator=( const Foo& item ) {
         ASSERT( item.state==LIVE, NULL );
         ASSERT( state==LIVE, NULL );
         thread_id = item.thread_id;
@@ -602,7 +602,7 @@ void TestIteratorTraits() {
 //! Test the iterators for concurrent_queue
 void TestIterator() {
     tbb::concurrent_queue<Foo> queue;
-    tbb::concurrent_queue<Foo>& const_queue = queue;
+    const tbb::concurrent_queue<Foo>& const_queue = queue;
     for( int j=0; j<500; ++j ) {
         TestIteratorAux( CALL_BEGIN(queue,j)      , CALL_END(queue,j)      , j );
         TestIteratorAux( CALL_BEGIN(const_queue,j), CALL_END(const_queue,j), j );
@@ -757,15 +757,26 @@ void TestExceptions() {
 
     REMARK("Testing exception safety\n");
     // verify 'clear()' on exception; queue's destructor calls its clear()
+    // Do test on queues of two different types at the same time to 
+    // catch problem with incorrect sharing between templates.
     {
-        concur_queue_t queue_clear;
-        try {
-            allocator_char_t::init_counters();
-            allocator_char_t::set_limits(N/2);
-            for( int k=0; k<N; k++ )
-                queue_clear.push( FooEx() );
-        } catch (...) {
-            // TODO: some assert here?
+        concur_queue_t queue0;
+        tbb::concurrent_queue<int,allocator_t> queue1;
+        for( int i=0; i<2; ++i ) {
+            bool caught = false;
+            try {
+                allocator_char_t::init_counters();
+                allocator_char_t::set_limits(N/2);
+                for( int k=0; k<N; k++ ) {
+                    if( i==0 )
+                        queue0.push( FooEx() );
+                    else
+                        queue1.push( k );
+                }
+            } catch (...) {
+                caught = true;
+            }
+            ASSERT( caught, "call to push should have thrown exception" );
         }
     }
     REMARK("... queue destruction test passed\n");
@@ -853,12 +864,37 @@ void TestExceptions() {
     }
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Set default for minimum number of threads.
-    MinThread = 1;
-    ParseCommandLine(argc,argv);
+template<typename T>
+struct TestQueueElements: NoAssign {
+    tbb::concurrent_queue<T>& queue;
+    const int nthread;
+    TestQueueElements( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
+    void operator()( int k ) const {
+        for( int i=0; i<1000; ++i ) {
+            if( (i&0x1)==0 ) {
+                __TBB_ASSERT( T(k)<T(nthread), NULL );
+                queue.push( T(k) );
+            } else {
+                // Pop item from queue
+                T item;
+                queue.try_pop(item);
+                __TBB_ASSERT( item<=T(nthread), NULL );
+            }
+        }
+    }
+};
 
+//! Test concurrent queue with primitive data type
+template<typename T>
+void TestPrimitiveTypes( int nthread, T exemplar )
+{
+    tbb::concurrent_queue<T> queue;
+    for( int i=0; i<100; ++i )
+        queue.push( exemplar );
+    NativeParallelFor( nthread, TestQueueElements<T>(queue,nthread) );
+}
+
+int TestMain () {
     TestEmptyQueue<char>();
     TestEmptyQueue<Foo>();
 #if TBB_DEPRECATED
@@ -869,6 +905,11 @@ int main( int argc, char* argv[] ) {
     TestIterator();
     TestConstructors();
 
+    TestPrimitiveTypes( MaxThread, (char)1 );
+    TestPrimitiveTypes( MaxThread, (int)-12 );
+    TestPrimitiveTypes( MaxThread, (float)-1.2f );
+    TestPrimitiveTypes( MaxThread, (double)-4.3 );
+
     // Test concurrent operations
     for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
 #if TBB_DEPRECATED
@@ -887,6 +928,5 @@ int main( int argc, char* argv[] ) {
 #else
     TestExceptions();
 #endif
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
index 37a7100..9c8e6d9 100644
--- a/src/test/test_concurrent_vector.cpp
+++ b/src/test/test_concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -785,7 +785,6 @@ void TestSort() {
 //------------------------------------------------------------------------
 // Test exceptions safety (from allocator and items constructors)
 //------------------------------------------------------------------------
-#if __TBB_EXCEPTIONS
 void TestExceptions() {
     typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;
     typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;
@@ -941,14 +940,9 @@ void TestExceptions() {
         ASSERT(false, "unexpected exception");
     }
 }
-#endif// __TBB_EXCEPTIONS
 //------------------------------------------------------------------------
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Test requires at least one thread.
-    MinThread = 1;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("ERROR: MinThread=%d, but must be at least 1\n",MinThread); MinThread = 1;
     }
@@ -974,16 +968,13 @@ int main( int argc, char* argv[] ) {
     TestFindPrimes();
 #endif
     TestSort();
-#if __TBB_EXCEPTIONS
 #if __TBB_EXCEPTION_HANDLING_BROKEN
     REPORT("Warning: Exception safety test is skipped due to a known issue.\n");
 #else
     TestExceptions();
 #endif
-#endif//__TBB_EXCEPTIONS
 #endif//!TBB_DEPRECATED
     ASSERT( !FooCount, NULL );
     REMARK("sizeof(concurrent_vector<int>) == %d\n", (int)sizeof(tbb::concurrent_vector<int>));
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_critical_section.cpp b/src/test/test_critical_section.cpp
new file mode 100644
index 0000000..77bb9ff
--- /dev/null
+++ b/src/test/test_critical_section.cpp
@@ -0,0 +1,225 @@
+/*
+    Copyright 2005-2010 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 critical section
+//
+#include "tbb/critical_section.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/enumerable_thread_specific.h"
+#include "tbb/tick_count.h"
+#include "harness_assert.h"
+#include "harness.h"
+#include <math.h>
+
+#include "harness_barrier.h"
+Harness::SpinBarrier sBarrier;
+tbb::critical_section cs;
+const int MAX_WORK = 300;
+
+struct BusyBody : NoAssign {
+    tbb::enumerable_thread_specific<double> &locals;
+    const int nThread;
+    const int WorkRatiox100;
+    int &unprotected_count;
+    bool test_throw;
+
+    BusyBody( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :
+        locals(locals_), 
+        nThread(nThread_), 
+        WorkRatiox100(workRatiox100_), 
+        unprotected_count(unprotected_count_),
+        test_throw(test_throw_) { 
+        sBarrier.initialize(nThread_);
+    }
+
+    void operator()(const int /* threadID */ ) const {
+        int nIters = MAX_WORK/nThread;
+        sBarrier.wait();
+        tbb::tick_count t0 = tbb::tick_count::now();
+        for(int j = 0; j < nIters; j++) {
+
+            for(int i = 0; i < MAX_WORK * (100 - WorkRatiox100); i++) {
+                locals.local() += 1.0;
+            }
+            cs.lock();
+            ASSERT( !cs.try_lock(), "recursive try_lock must fail" );
+#if !__TBB_EXCEPTION_HANDLING_BROKEN 
+            if(test_throw && j == (nIters / 2)) {
+                bool was_caught = false,
+                     unknown_exception = false;
+                try {
+                    cs.lock();
+                }
+                catch(tbb::improper_lock& e) {
+                    ASSERT( e.what(), "Error message is absent" );
+                    was_caught = true;
+                }
+                catch(...) {
+                    was_caught = unknown_exception = true;
+                }
+                ASSERT(was_caught, "Recursive lock attempt did not throw");
+                ASSERT(!unknown_exception, "tbb::improper_lock exception is expected");
+            }
+#endif
+            for(int i = 0; i < MAX_WORK * WorkRatiox100; i++) {
+                locals.local() += 1.0;
+            }
+            unprotected_count++;
+            cs.unlock();
+        }
+        locals.local() = (tbb::tick_count::now() - t0).seconds();
+    }
+};
+
+struct BusyBodyScoped : NoAssign {
+    tbb::enumerable_thread_specific<double> &locals;
+    const int nThread;
+    const int WorkRatiox100;
+    int &unprotected_count;
+    bool test_throw;
+
+    BusyBodyScoped( int nThread_, int workRatiox100_, tbb::enumerable_thread_specific<double> &locals_, int &unprotected_count_, bool test_throw_) :
+        locals(locals_), 
+        nThread(nThread_), 
+        WorkRatiox100(workRatiox100_), 
+        unprotected_count(unprotected_count_),
+        test_throw(test_throw_) { 
+        sBarrier.initialize(nThread_);
+    }
+
+    void operator()(const int /* threadID */ ) const {
+        int nIters = MAX_WORK/nThread;
+        sBarrier.wait();
+        tbb::tick_count t0 = tbb::tick_count::now();
+        for(int j = 0; j < nIters; j++) {
+
+            for(int i = 0; i < MAX_WORK * (100 - WorkRatiox100); i++) {
+                locals.local() += 1.0;
+            }
+            { 
+                tbb::critical_section::scoped_lock my_lock(cs);
+                for(int i = 0; i < MAX_WORK * WorkRatiox100; i++) {
+                    locals.local() += 1.0;
+                }
+                unprotected_count++;
+            }
+        }
+        locals.local() = (tbb::tick_count::now() - t0).seconds();
+    }
+};
+
+void
+RunOneCriticalSectionTest(int nThreads, int csWorkRatio, bool test_throw) {
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    tbb::enumerable_thread_specific<double> test_locals;
+    int myCount = 0;
+    BusyBody myBody(nThreads, csWorkRatio, test_locals, myCount, test_throw);
+    BusyBodyScoped myScopedBody(nThreads, csWorkRatio, test_locals, myCount, test_throw);
+    tbb::critical_section cs;
+    init.initialize(nThreads);
+    tbb::tick_count t0;
+    {
+        t0 = tbb::tick_count::now();
+        myCount = 0;
+        NativeParallelFor(nThreads, myBody);
+        ASSERT(myCount == (MAX_WORK - (MAX_WORK % nThreads)), NULL);
+        REMARK("%d threads, work ratio %d per cent, time %g", nThreads, csWorkRatio, (tbb::tick_count::now() - t0).seconds());
+        if (nThreads > 1) {
+            double etsSum = 0;
+            double etsMax = 0;
+            double etsMin = 0;
+            double etsSigmaSq = 0;
+            double etsSigma = 0;
+
+            for(tbb::enumerable_thread_specific<double>::const_iterator ci = test_locals.begin(); ci != test_locals.end(); ci++) {
+                etsSum += *ci;
+                if(etsMax==0.0) {
+                    etsMin = *ci;
+                }
+                else {
+                    if(etsMin > *ci) etsMin = *ci;
+                }
+                if(etsMax < *ci) etsMax = *ci;
+            }
+            double etsAvg = etsSum / (double)nThreads;
+            for(tbb::enumerable_thread_specific<double>::const_iterator ci = test_locals.begin(); ci != test_locals.end(); ci++) {
+                etsSigma = etsAvg - *ci;
+                etsSigmaSq += etsSigma * etsSigma;
+            }
+            // an attempt to gauge the "fairness" of the scheduling of the threads.  We figure
+            // the standard deviation, and compare it with the maximum deviation from the
+            // average time.  If the difference is 0 that means all threads finished in the same
+            // amount of time.  If non-zero, the difference is divided by the time, and the
+            // negative log is taken.  If > 2, then the difference is on the order of 0.01*t
+            // where T is the average time.  We aritrarily define this as "fair."
+            etsSigma = sqrt(etsSigmaSq/double(nThreads)); 
+            etsMax -= etsAvg;  // max - a == delta1
+            etsMin = etsAvg - etsMin;  // a - min == delta2
+            if(etsMax < etsMin) etsMax = etsMin;
+            etsMax -= etsSigma;
+            // ASSERT(etsMax >= 0, NULL);  // shouldn't the maximum difference from the mean be > the stddev?
+            etsMax = (etsMax > 0.0) ? etsMax : 0.0;  // possible rounding error
+            double fairness = etsMax / etsAvg;
+            if(fairness == 0.0) {
+                fairness = 100.0;
+            }
+            else fairness = - log10(fairness);
+            if(fairness > 2.0 ) {
+                REMARK("  Fair (%g)\n", fairness);
+            }
+            else {
+                REMARK("  Unfair (%g)\n", fairness);
+            }
+        }
+        myCount = 0;
+        NativeParallelFor(nThreads, myScopedBody);
+        ASSERT(myCount == (MAX_WORK - (MAX_WORK % nThreads)), NULL);
+
+    }
+
+    init.terminate();
+}
+
+void
+RunParallelTests() {
+    for(int p = MinThread; p <= MaxThread; p++) {
+        for(int cs_ratio = 1; cs_ratio < 95; cs_ratio *= 2) {
+            RunOneCriticalSectionTest(p, cs_ratio, /*test_throw*/true);
+        }
+    }
+}
+
+int TestMain () {
+    if(MinThread <= 0) MinThread = 1;
+
+    if(MaxThread > 0) {
+        RunParallelTests();
+    }
+
+    return Harness::Done;
+}
diff --git a/src/test/test_eh_algorithms.cpp b/src/test/test_eh_algorithms.cpp
index 9e08330..e128382 100644
--- a/src/test/test_eh_algorithms.cpp
+++ b/src/test/test_eh_algorithms.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -1241,14 +1241,12 @@ void TestTbbExceptionAPI () {
 /** If min and max thread numbers specified on the command line are different,
     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 **/
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     REMARK ("Using %s", TBB_USE_CAPTURED_EXCEPTION ? "tbb:captured_exception" : "exact exception propagation");
-    MinThread = max(2, MinThread);
-    MaxThread = max(MinThread, MaxThread);
+    MinThread = min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread));
+    MaxThread = max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread));
     ASSERT (FLAT_RANGE >= FLAT_GRAIN * MaxThread, "Fix defines");
-#if __TBB_EXCEPTIONS
+#if __TBB_EXCEPTIONS && !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     int step = max((MaxThread - MinThread + 1)/2, 1);
     for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; g_NumThreads += step ) {
         REMARK ("Number of threads %d", g_NumThreads);
@@ -1265,9 +1263,8 @@ int main(int argc, char* argv[]) {
 #if __TBB_EXCEPTION_HANDLING_BROKEN
     REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
 #endif
-    REPORT("done\n");
-#else  /* !__TBB_EXCEPTION_HANDLING_BROKEN */
-    REPORT("skip\n");
+    return Harness::Done;
+#else  /* !__TBB_EXCEPTIONS */
+    return Harness::Skipped;
 #endif /* !__TBB_EXCEPTIONS */
-    return 0;
 }
diff --git a/src/test/test_eh_tasks.cpp b/src/test/test_eh_tasks.cpp
index efe6b77..c03909e 100644
--- a/src/test/test_eh_tasks.cpp
+++ b/src/test/test_eh_tasks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -242,7 +242,7 @@ class RootLauncherTask : public TaskBase {
             // Give a child of our siblings a chance to throw the test exception
             WaitForException();
         CATCH();
-        ASSERT (!g_UnknownException, "unknown exception was caught");
+        ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, "unknown exception was caught");
         return NULL;
     }
 public:
@@ -599,7 +599,7 @@ void Test10 () {
         g_UnknownException = true;
     }
     ASSERT (g_ExceptionCaught, "no exception occurred");
-    ASSERT (!g_UnknownException, "unknown exception was caught");
+    ASSERT (__TBB_EXCEPTION_TYPE_INFO_BROKEN || !g_UnknownException, "unknown exception was caught");
     r->destroy(*r);
 } // void Test10 ()
 
@@ -672,22 +672,19 @@ void RunTests () {
 }
 #endif /* __TBB_EXCEPTIONS */
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     REMARK ("Using %s", TBB_USE_CAPTURED_EXCEPTION ? "tbb:captured_exception" : "exact exception propagation");
-    MinThread = min(NUM_ROOTS_IN_GROUP, max(2, MinThread));
-    MaxThread = min(NUM_ROOTS_IN_GROUP, max(MinThread, MaxThread));
+    MinThread = min(NUM_ROOTS_IN_GROUP, min(tbb::task_scheduler_init::default_num_threads(), max(2, MinThread)));
+    MaxThread = min(NUM_ROOTS_IN_GROUP, max(MinThread, min(tbb::task_scheduler_init::default_num_threads(), MaxThread)));
     ASSERT (NUM_ROOTS_IN_GROUP < NUM_ROOT_TASKS, "Fix defines");
-#if __TBB_EXCEPTIONS
+#if __TBB_EXCEPTIONS && !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     // Test0 always runs on one thread
     Test0();
     g_SolitaryException = 0;
     for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; ++g_NumThreads )
         RunTests();
-    REPORT("done\n");
+    return Harness::Done;
 #else
-    REPORT("skip\n");
+    return Harness::Skipped;
 #endif /* __TBB_EXCEPTIONS */
-    return 0;
 }
diff --git a/src/test/test_enumerable_thread_specific.cpp b/src/test/test_enumerable_thread_specific.cpp
index a47d9c2..751b317 100644
--- a/src/test/test_enumerable_thread_specific.cpp
+++ b/src/test/test_enumerable_thread_specific.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,7 @@
     the GNU General Public License.
 */
 
+#define __TBB_EXTRA_DEBUG 1 // for concurrent_hash_map
 #include "tbb/enumerable_thread_specific.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/parallel_for.h"
@@ -225,20 +226,14 @@ void run_parallel_scalar_tests(const char *test_name) {
 
     static tbb::enumerable_thread_specific<T> static_sums(static_cast<T>(0));
 
-    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
     T exemplar;
     test_helper<T>::init(exemplar);
     T exemplar23;
     test_helper<T>::set(exemplar23,23);
 
     for (int p = MinThread; p <= MaxThread; ++p) { 
-
-
-        if (p == 0) continue;
-
         REMARK("Testing parallel %s on %d thread(s)... ", test_name, p); 
-        init.initialize(p);
-
+        tbb::task_scheduler_init init(p);
         tbb::tick_count t0;
 
         T iterator_sum;
@@ -389,7 +384,6 @@ void run_parallel_scalar_tests(const char *test_name) {
 
         REMARK("done\nparallel %s, %d, %g, %g\n", test_name, p, test_helper<T>::get(iterator_sum), 
                                                       ( tbb::tick_count::now() - t0).seconds());
-        init.terminate();
     }
 }
 
@@ -443,14 +437,11 @@ struct parallel_vector_reduce_body {
 template< typename T >
 void run_parallel_vector_tests(const char *test_name) {
     tbb::tick_count t0;
-    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
     typedef std::vector<T, tbb::tbb_allocator<T> > container_type;
 
-    for (int p = MinThread; p <= MaxThread; ++p) { 
-
-        if (p == 0) continue;
+    for (int p = MinThread; p <= MaxThread; ++p) {
         REMARK("Testing parallel %s on %d thread(s)... ", test_name, p);
-        init.initialize(p);
+        tbb::task_scheduler_init init(p);
 
         T sum;
         test_helper<T>::init(sum);
@@ -496,21 +487,17 @@ void run_parallel_vector_tests(const char *test_name) {
         double result_value = test_helper<T>::get(sum);
         ASSERT( EXPECTED_SUM == result_value, NULL);
         REMARK("done\nparallel %s, %d, %g, %g\n", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());
-        init.terminate();
     }
 }
 
 template<typename T>
 void run_cross_type_vector_tests(const char *test_name) {
     tbb::tick_count t0;
-    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
     typedef std::vector<T, tbb::tbb_allocator<T> > container_type;
 
-    for (int p = MinThread; p <= MaxThread; ++p) { 
-
-        if (p == 0) continue;
+    for (int p = MinThread; p <= MaxThread; ++p) {
         REMARK("Testing parallel %s on %d thread(s)... ", test_name, p);
-        init.initialize(p);
+        tbb::task_scheduler_init init(p);
 
         T sum;
         test_helper<T>::init(sum);
@@ -557,7 +544,6 @@ void run_cross_type_vector_tests(const char *test_name) {
         double result_value = test_helper<T>::get(sum);
         ASSERT( EXPECTED_SUM == result_value, NULL);
         REMARK("done\nparallel %s, %d, %g, %g\n", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());
-        init.terminate();
     }
 }
 
@@ -643,15 +629,10 @@ void do_tbb_threads( int max_threads, minimal_ptr *a ) {
 
 void
 flog_key_creation_and_deletion() {
-
     const int FLOG_REPETITIONS = 100;
     minimal_ptr a[VALID_NUMBER_OF_KEYS];
-    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
 
     for (int p = MinThread; p <= MaxThread; ++p) { 
-
-        if (p == 0) continue;
-
         REMARK("Testing repeated deletes on %d threads... ", p);
 
         for (int j = 0; j < FLOG_REPETITIONS; ++j) {
@@ -923,24 +904,21 @@ run_assignment_and_copy_constructor_tests() {
     run_assign_and_copy_constructor_test<minimal>("minimal");
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char *argv[]) {
-   ParseCommandLine(argc, argv);
-   run_segmented_iterator_tests();
-
-   flog_key_creation_and_deletion();
+int TestMain () {
+    run_segmented_iterator_tests();
+    flog_key_creation_and_deletion();
 
-   if (MinThread == 0) 
-      run_serial_tests();
-
-   if (MaxThread > 0) {
-      run_parallel_tests();
-      run_cross_type_tests();
-   }
+    if (MinThread == 0) {
+        run_serial_tests();
+        MinThread = 1;
+    }
+    if (MaxThread > 0) {
+        run_parallel_tests();
+        run_cross_type_tests();
+    }
 
     run_assignment_and_copy_constructor_tests();
 
-   REPORT("done\n");
-   return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
index f16c83c..511d215 100644
--- a/src/test/test_halt.cpp
+++ b/src/test/test_halt.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -100,16 +100,12 @@ void Measure(const char *name, MeasureFunc func, int n)
     REMARK("\t- in %f msec\n", T.seconds()*1000);
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    MaxThread = 8; MinThread = 2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
+    MinThread = max(2, MinThread);
     int NumbersCount = 100;
     short recycle = 100;
-
     do {
-        for(int threads = 2; threads <= MaxThread; threads++)
-        {
+        for(int threads = MinThread; threads <= MaxThread; threads++) {
             task_scheduler_init scheduler_init(threads);
             REMARK("Threads number is %d\t", threads);
             Measure("Shared serial (wrapper mutex)\t", SharedSerialFib<mutex>, NumbersCount);
@@ -117,6 +113,5 @@ int main( int argc, char* argv[] ) {
             //sum = Measure("Shared serial (queuing_mutex)", SharedSerialFib<tbb::queuing_mutex>, NumbersCount);
         }
     } while(--recycle);
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_handle_perror.cpp b/src/test/test_handle_perror.cpp
index 2c567a7..6825acc 100644
--- a/src/test/test_handle_perror.cpp
+++ b/src/test/test_handle_perror.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -47,12 +47,11 @@ static void TestHandlePerror() {
     ASSERT(caught,NULL);
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
 #if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     TestHandlePerror();
+    return Harness::Done;
+#else
+    return Harness::Skipped;
 #endif
-    REPORT("done\n");
-    return 0;
 }
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
index 7211732..e05fbcf 100644
--- a/src/test/test_inits_loop.cpp
+++ b/src/test/test_inits_loop.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,6 +28,7 @@
 
 #if __APPLE__
 
+#define HARNESS_CUSTOM_MAIN 1
 #include "harness.h"
 #include <cstdlib>
 #include "tbb/task_scheduler_init.h"
@@ -79,15 +80,14 @@ int main( int argc, char * argv[] ) {
     if( MinThread <= 0 ) {
         tbb::task_scheduler_init init( 2 ); // even number required for an error
     } else {
-        for(int i = 0; i<MinThread; i++)
+        for(int i = 0; i<MinThread; i++) {
             if(exec_test(argv[0])) {
                 REPORT("ERROR: execution fails at %d-th iteration!\n", i);
                 exit(1);
             }
-
+        }
         REPORT("done\n");
     }
-    return 0;
 }
 
 #else /* !__APPLE__ */
@@ -95,10 +95,8 @@ int main( int argc, char * argv[] ) {
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness.h"
 
-__TBB_TEST_EXPORT
-int main() {
-    REPORT("skip\n");
-    return 0;
+int TestMain () {
+    return Harness::Skipped;
 }
 
 #endif /* !__APPLE__ */
diff --git a/src/test/test_ittnotify.cpp b/src/test/test_ittnotify.cpp
index 655dabd..c92e45b 100644
--- a/src/test/test_ittnotify.cpp
+++ b/src/test/test_ittnotify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -81,11 +81,7 @@ void Test( const char * name ) {
 
 #endif /* !DO_ITT_NOTIFY */
 
-__TBB_TEST_EXPORT
-int main( int argc, char * argv[] ) {
-    // Default is to run on two threads
-    MinThread = MaxThread = 2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
 #if DO_ITT_NOTIFY
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK( "testing with %d workers\n", p );
@@ -95,9 +91,8 @@ int main( int argc, char * argv[] ) {
         TEST_MUTEX( queuing_rw_mutex, "Queuing RW Mutex" );
         TEST_MUTEX( spin_rw_mutex, "Spin RW Mutex" );
     }
-    REPORT("done\n");
+    return Harness::Done;
 #else /* !DO_ITT_NOTIFY */
-    REPORT("skip\n");
+    return Harness::Skipped;
 #endif /* !DO_ITT_NOTIFY */
-    return 0;
 }
diff --git a/src/test/test_lambda.cpp b/src/test/test_lambda.cpp
index 057597b..6f8b883 100644
--- a/src/test/test_lambda.cpp
+++ b/src/test/test_lambda.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -67,10 +67,7 @@ int Fib(int n) {
 #include "harness_report.h"
 #include "harness_assert.h"
 
-int main(int argc, char* argv[]) {
-    MinThread = 1;
-    ParseCommandLine(argc, argv);
-
+int TestMain () {
 #if __TBB_LAMBDAS_PRESENT
     ASSERT( MinThread>=1, "Error: Number of threads must be positive.\n");
 
@@ -226,10 +223,8 @@ int main(int argc, char* argv[]) {
                "enumerable_thread_specific w/lambda failed.\n");
         REMARK("passed.\n");
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 #else
-    REPORT("skip\n");
-    return 0;
-#endif
+    return Harness::Skipped;
+#endif /* !__TBB_LAMBDAS_PRESENT */
 }
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index c2c48f7..a28c9ee 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,6 +27,7 @@
 */
 
 const int MByte = 1048576; //1MB
+bool __tbb_test_errno = false;
 
 /* _WIN32_WINNT should be defined at the very beginning, 
    because other headers might include <windows.h>
@@ -62,6 +63,7 @@ void limitMem( int limit )
         exit(1);
     }
 }
+// Do not test errno with static VC runtime
 #else
 #include <sys/resource.h>
 #include <stdlib.h>
@@ -83,6 +85,9 @@ void limitMem( int limit )
 }
 #endif 
 
+#define ASSERT_ERRNO(cond, msg)  ASSERT( !__tbb_test_errno || (cond), msg )
+#define CHECK_ERRNO(cond) (__tbb_test_errno && (cond))
+
 #include <time.h>
 #include <errno.h>
 #include <vector>
@@ -90,6 +95,7 @@ void limitMem( int limit )
 #include "tbb/scalable_allocator.h"
 #include "tbb/tbb_machine.h"
 
+#define HARNESS_CUSTOM_MAIN 1
 #include "harness.h"
 #include "harness_barrier.h"
 #if __linux__
@@ -326,13 +332,44 @@ int main(int argc, char* argv[]) {
     ReallocParam();
     limitMem(0);
 #endif
+    
+//for linux and dynamic runtime errno is used to check allocator fuctions
+//check if library compiled with /MD(d) and we can use errno
+#if _MSC_VER 
+#if defined(_MT) && defined(_DLL) //check errno if test itself compiled with /MD(d) only
+    #pragma comment(lib, "version.lib")
+    char*  version_info_block = NULL;
+    int version_info_block_size; 
+    LPVOID comments_block = NULL;
+    UINT comments_block_size;
+#ifdef _DEBUG
+#define __TBBMALLOCDLL "tbbmalloc_debug.dll"
+#else  //_DEBUG
+#define __TBBMALLOCDLL "tbbmalloc.dll"
+#endif //_DEBUG
+    version_info_block_size = GetFileVersionInfoSize( __TBBMALLOCDLL, (LPDWORD)&version_info_block_size );
+    if( version_info_block_size 
+        && ((version_info_block = (char*)malloc(version_info_block_size)) != NULL)
+        && GetFileVersionInfo(  __TBBMALLOCDLL, NULL, version_info_block_size, version_info_block )
+        && VerQueryValue( version_info_block, "\\StringFileInfo\\000004b0\\Comments", &comments_block, &comments_block_size )
+        && strstr( (char*)comments_block, "/MD" )
+        ){
+            __tbb_test_errno = true;
+     }
+     if( version_info_block ) free( version_info_block );
+#endif // defined(_MT) && defined(_DLL)
+#else  // _MSC_VER
+    __tbb_test_errno = true;
+#endif // _MSC_VER
+
     for( int p=MaxThread; p>=MinThread; --p ) {
         REMARK("testing with %d threads\n", p );
         Harness::SpinBarrier *barrier = new Harness::SpinBarrier(p);
         NativeParallelFor( p, RoundRobin(p, barrier, Verbose) );
         delete barrier;
     }
-    if( !error_occurred ) REPORT("done\n");
+    if( !error_occurred ) 
+        REPORT("done\n");
     return 0;
 }
 
@@ -346,15 +383,19 @@ struct TestStruct
 //  std::string field6;
     std::vector<int> field7;
     double field8;
-    bool IzZero()
-        {
-            UCHAR *tmp;
-            tmp=(UCHAR*)this;
-            bool b=true;
-            for (int i=0; i<(int)sizeof(TestStruct); i++)
-                if (tmp[i]) b=false;
-            return b;
-        }
+    bool IsZero() {
+        int wordSz = sizeof(TestStruct) / sizeof(intptr_t);
+        int tailSz = sizeof(TestStruct) % sizeof(intptr_t);
+
+        intptr_t *buf =(intptr_t*)this;
+        char *bufTail =(char*) (buf+wordSz);
+
+        for (int i=0; i<wordSz; i++)
+            if (buf[i]) return false;
+        for (int i=0; i<tailSz; i++)
+            if (bufTail[i]) return false;
+        return true;
+    }
 };
 
 int Tposix_memalign(void **memptr, size_t alignment, size_t size)
@@ -528,7 +569,7 @@ void CMemTest::Zerofilling()
             continue;
         for (size_t j=0; j<CountElement; j++)
         {
-            if (!(TSMas+j)->IzZero())
+            if (!(TSMas+j)->IsZero())
             {
                 CountErrors++;
                 if (ShouldReportError()) REPORT("detect nonzero element at TestStruct\n");
@@ -578,7 +619,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
     for (num_1024=0; num_1024<MAXNUM_1024; num_1024++) {
         buf_1024[num_1024] = Tcalloc(1024, 1);
         if (! buf_1024[num_1024]) {
-            ASSERT(errno == ENOMEM, NULL);
+            ASSERT_ERRNO(errno == ENOMEM, NULL);
             break;
         }
     }
@@ -595,7 +636,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
             PointerList.push_back(MemStruct(tmp, Size));
         }
     } while(tmp != NULL);
-    ASSERT(errno == ENOMEM, NULL);
+    ASSERT_ERRNO(errno == ENOMEM, NULL);
     if (FullLog) REPORT("\n");
 
     // preparation complete, now running tests
@@ -611,7 +652,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
             if (tmp == NULL)
             {
                 CountNULL++;
-                if (errno != ENOMEM) {
+                if ( CHECK_ERRNO(errno != ENOMEM) ) {
                     CountErrors++;
                     if (ShouldReportError()) REPORT("NULL returned, error: errno (%d) != ENOMEM\n", errno);
                 }
@@ -622,12 +663,12 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                 // However, on most systems it does not set errno.
                 bool known_issue = false;
 #if __linux__
-                if( errno==ENOMEM ) known_issue = true;
+                if( CHECK_ERRNO(errno==ENOMEM) ) known_issue = true;
 #endif /* __linux__ */
-                if (errno != ENOMEM+j+1 && !known_issue) {
+                if ( CHECK_ERRNO(errno != ENOMEM+j+1) && !known_issue) {
                     CountErrors++;
                     if (ShouldReportError()) REPORT("error: errno changed to %d though valid pointer was returned\n", errno);
-                }      
+                }
                 memset(tmp, 0, Size);
                 PointerList.push_back(MemStruct(tmp, Size));
             }
@@ -650,7 +691,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
             if (tmp == NULL)
             {
                 CountNULL++;
-                if (errno != ENOMEM) {
+                if ( CHECK_ERRNO(errno != ENOMEM) ){
                     CountErrors++;
                     if (ShouldReportError()) REPORT("NULL returned, error: errno(%d) != ENOMEM\n", errno);
                 }
@@ -661,9 +702,9 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                 // However, on most systems it does not set errno.
                 bool known_issue = false;
 #if __linux__
-                if( errno==ENOMEM ) known_issue = true;
+                if( CHECK_ERRNO(errno==ENOMEM) ) known_issue = true;
 #endif /* __linux__ */
-                if (errno != ENOMEM+j+1 && !known_issue) {
+                if ( CHECK_ERRNO(errno != ENOMEM+j+1) && !known_issue ) {
                     CountErrors++;
                     if (ShouldReportError()) REPORT("error: errno changed to %d though valid pointer was returned\n", errno);
                 }      
@@ -711,7 +752,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                 else if (tmp == NULL)
                 {
                     CountNULL++;
-                    if (errno != ENOMEM)
+                    if ( CHECK_ERRNO(errno != ENOMEM) )
                     {
                         CountErrors++;
                         if (ShouldReportError()) REPORT("NULL returned, error: errno(%d) != ENOMEM\n", errno);
@@ -734,6 +775,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
     {
         Tfree(PointerList[i].Pointer);
     }
+
     if (perProcessLimits)
         limitBarrier->wait(no_limit);
     else
@@ -898,13 +940,13 @@ void CMemTest::TestAlignedParameters()
             if (bad_align&(bad_align-1)) {
                 memptr = Taligned_malloc(100, bad_align);
                 ASSERT(NULL==memptr, NULL);
-                ASSERT(EINVAL==errno, NULL);
+                ASSERT_ERRNO(EINVAL==errno, NULL);
             }
     
         // size is zero
         memptr = Taligned_malloc(0, 16);
         ASSERT(NULL==memptr, "size is zero, so must return NULL");
-        ASSERT(EINVAL==errno, NULL);
+        ASSERT_ERRNO(EINVAL==errno, NULL);
     }
     if (Taligned_free) {
         // NULL pointer is OK to free
@@ -913,7 +955,7 @@ void CMemTest::TestAlignedParameters()
         /* As there is no return value for free, strictly speaking we can't 
            check errno here. But checked implementations obey the assertion.
         */
-        ASSERT(0==errno, NULL);
+        ASSERT_ERRNO(0==errno, NULL);
     }
     if (Raligned_realloc) {
         for (int i=1; i<20; i++) {
@@ -921,11 +963,11 @@ void CMemTest::TestAlignedParameters()
             errno = i;
             void *ptr = Taligned_malloc(i*10, 128);
             ASSERT(NULL!=ptr, NULL);
-            ASSERT(0!=errno, NULL);
+            ASSERT_ERRNO(0!=errno, NULL);
             // if size is zero and pointer is not NULL, works like free
             memptr = Taligned_realloc(ptr, 0, 64);
             ASSERT(NULL==memptr, NULL);
-            ASSERT(0!=errno, NULL);
+            ASSERT_ERRNO(0!=errno, NULL);
         }
         // alignment isn't power of 2
         for (int bad_align=3; bad_align<16; bad_align++)
@@ -934,14 +976,13 @@ void CMemTest::TestAlignedParameters()
                 memptr = Taligned_realloc(&ptr, 100, bad_align);
                 ASSERT(NULL==memptr, NULL);
                 ASSERT(&bad_align==ptr, NULL);
-                ASSERT(EINVAL==errno, NULL);
+                ASSERT_ERRNO(EINVAL==errno, NULL);
             }
     }
 }
 
 void CMemTest::RunAllTests(int total_threads)
 {
-
     Zerofilling();
     Free_NULL();
     InvariantDataRealloc(/*aligned=*/false);
diff --git a/src/test/test_malloc_lib_unload.cpp b/src/test/test_malloc_lib_unload.cpp
new file mode 100644
index 0000000..c77af1f
--- /dev/null
+++ b/src/test/test_malloc_lib_unload.cpp
@@ -0,0 +1,134 @@
+/*
+    Copyright 2005-2010 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 <stdio.h>
+#if _WIN32 || _WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif
+#include <tbb/tbb_stddef.h>
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+#include "harness_memory.h"
+
+#if TBB_USE_DEBUG
+#define DEBUG_SUFFIX "_debug"
+#else
+#define DEBUG_SUFFIX
+#endif /* TBB_USE_DEBUG */
+
+// MALLOCLIB_NAME is the name of the TBB memory allocator library.
+#if _WIN32||_WIN64
+#define MALLOCLIB_NAME "tbbmalloc" DEBUG_SUFFIX ".dll"
+#elif __APPLE__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
+#elif __linux__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
+#elif __FreeBSD__ || __sun
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
+#else
+#error Unknown OS
+#endif
+
+struct Run {
+    void operator()( int /*id*/ ) const {
+        void* (*malloc_ptr)(size_t);
+        void (*free_ptr)(void*);
+
+#if _WIN32 || _WIN64
+        HMODULE lib = LoadLibrary(MALLOCLIB_NAME);
+#else
+        void *lib = dlopen(MALLOCLIB_NAME, RTLD_NOW|RTLD_GLOBAL);
+#endif
+        if (NULL == lib) {
+            REPORT("Can't load " MALLOCLIB_NAME "\n");
+            exit(1);
+        }
+#if _WIN32 || _WIN64
+        (void *&)malloc_ptr = GetProcAddress(lib, "scalable_malloc");
+        (void *&)free_ptr = GetProcAddress(lib, "scalable_free");
+#else
+        (void *&)malloc_ptr = dlsym(lib, "scalable_malloc");
+        (void *&)free_ptr = dlsym(lib, "scalable_free");
+#endif
+        if (!malloc_ptr || !free_ptr)  {
+            REPORT("Can't find scalable_(malloc|free) in " MALLOCLIB_NAME "\n");
+            exit(1);
+        }
+
+        void *p = malloc_ptr(100);
+        memset(p, 1, 100);
+        free_ptr(p);
+
+#if _WIN32 || _WIN64
+        BOOL ret = FreeLibrary(lib);
+        ASSERT(ret, "FreeLibrary must be successful");
+        ASSERT(GetModuleHandle(MALLOCLIB_NAME),  
+               MALLOCLIB_NAME " must not be unloaded");
+#else
+        int ret = dlclose(lib);
+        ASSERT(ret == 0, "dlclose must be successful");
+        ASSERT(dlsym(RTLD_DEFAULT, "scalable_malloc"),  
+               MALLOCLIB_NAME " must not be unloaded");
+#endif
+    }
+};
+
+int TestMain () {
+    int i;
+    ptrdiff_t memory_leak;
+
+    // warm-up run
+    NativeParallelFor( 1, Run() );
+    /* 1st call to GetMemoryUsage() allocate some memory,
+       but it seems memory consumption stabilized after this.
+     */
+    GetMemoryUsage();
+    size_t memory_in_use = GetMemoryUsage();
+    ASSERT(memory_in_use == GetMemoryUsage(), 
+           "Memory consumption should not increase after 1st GetMemoryUsage() call");
+
+    // expect that memory consumption stabilized after several runs
+    for (i=0; i<3; i++) {
+        size_t memory_in_use = GetMemoryUsage();
+        for (int j=0; j<10; j++)
+            NativeParallelFor( 1, Run() );
+        memory_leak = GetMemoryUsage() - memory_in_use;
+        if (memory_leak == 0)  // possibly too strong?
+            break;
+    }
+    if(3==i) {
+        // not stabilized, could be leak
+        REPORT( "Error: memory leak of up to %ld bytes\n", static_cast<long>(memory_leak));
+        exit(1);
+    }
+
+    return Harness::Done;
+}
diff --git a/src/test/test_malloc_overload.cpp b/src/test/test_malloc_overload.cpp
index f965cf8..df219f0 100644
--- a/src/test/test_malloc_overload.cpp
+++ b/src/test/test_malloc_overload.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,6 +37,9 @@
 #if MALLOC_REPLACEMENT_AVAILABLE
 
 #if _WIN32 || _WIN64
+// as the test build /EHs-, suppress warning C4530: C++ exception handler used, 
+// but unwind semantics are not enabled
+#define _HAS_EXCEPTIONS 0
 // to use strdup and putenv w/o warnings
 #define _CRT_NONSTDC_NO_DEPRECATE 1
 #endif
@@ -58,6 +61,7 @@
 #if __MINGW32__
 #include <unistd.h>
 #else
+typedef unsigned __int16 uint16_t;
 typedef unsigned __int32 uint32_t;
 typedef unsigned __int64 uint64_t;
 #endif
@@ -83,17 +87,20 @@ static inline bool isAligned(T arg, uintptr_t alignment) {
 
 /* Below is part of MemoryAllocator.cpp. */
 
-/*
- * The identifier to make sure that memory is allocated by scalable_malloc.
- */
-const uint64_t theMallocUniqueID=0xE3C7AF89A1E2D8C1ULL; 
+union BackRefIdx { // index to backreference array
+    uint32_t t;
+    struct {
+        uint16_t master;  // index in BackRefMaster
+        uint16_t offset;  // offset from beginning of BackRefBlock
+    } s;
+};
 
 struct LargeObjectHeader {
-    void        *unalignedResult;   /* The base of the memory returned from getMemory, this is what is used to return this to the OS */
+    void        *unalignedResult;   /* The address obtained from and returned 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 */
-    bool         getMemoryBlock;    /* Is memory allocated by getMemory or by getRawMemory? */
+    bool         fromMapMemory;     /* True if allocated with MapMemory usage enforced */
+    BackRefIdx   backRefIdx;
 };
 
 /*
@@ -113,7 +120,7 @@ static bool scalableMallocLargeBlock(void *object, size_t size)
 #endif
 
     LargeObjectHeader *h = (LargeObjectHeader*)((uintptr_t)object-sizeof(LargeObjectHeader));
-    return h->mallocUniqueID==theMallocUniqueID && h->objectSize==size;
+    return uintptr_t(h->unalignedSize)<uintptr_t(h) && h->objectSize==size;
 }
 
 struct BigStruct {
@@ -226,6 +233,7 @@ int main(int , char *[]) {
 }
 
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
+#define HARNESS_CUSTOM_MAIN 1
 #include "harness.h"
 
 #else  /* !MALLOC_REPLACEMENT_AVAILABLE */
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
index a9f1f2e..a92c481 100644
--- a/src/test/test_malloc_pure_c.c
+++ b/src/test/test_malloc_pure_c.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_malloc_regression.cpp b/src/test/test_malloc_regression.cpp
index a6e5162..212aa9e 100644
--- a/src/test/test_malloc_regression.cpp
+++ b/src/test/test_malloc_regression.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,10 +53,6 @@ void RunThread(const Body& body, const Arg& arg) {
 
 // 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 
@@ -96,14 +92,14 @@ bool test_bootstrap_leak(void) {
     return memory_leak<=0;
 }
 
-__TBB_TEST_EXPORT
-int main( int /*argc*/, char* argv[] ) {
+int TestMain () {
     bool passed = true;
+    // Check whether memory usage data can be obtained; if not, skip test_bootstrap_leak.
+    if( !GetMemoryUsage() )
+        return Harness::Skipped;
 
     passed &= test_bootstrap_leak();
 
-    if(passed) REPORT("done\n");
-    else       REPORT("%s failed\n", argv[0]);
-
-    return passed?0:1;
+    ASSERT( passed, "Test failed" );
+    return Harness::Done;
 }
diff --git a/src/test/test_malloc_whitebox.cpp b/src/test/test_malloc_whitebox.cpp
index 75d74be..239ab76 100644
--- a/src/test/test_malloc_whitebox.cpp
+++ b/src/test/test_malloc_whitebox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,7 +32,7 @@
 
 // To not depends on ITT support stuff
 #ifdef DO_ITT_NOTIFY
- #undef DO_ITT_NOTIFY
+#undef DO_ITT_NOTIFY
 #endif
 
 #include "MemoryAllocator.cpp" // can be in ../tbbmalloc or another directory
@@ -163,9 +163,114 @@ Harness::SpinBarrier TestStartupAlloc::init_barrier;
 
 #endif /* MALLOC_CHECK_RECURSION */
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
+class BackRefWork: NoAssign {
+    struct TestBlock {
+        intptr_t   data;
+        BackRefIdx idx;
+    };
+    static const int ITERS = 2*BR_MAX_CNT+2;
+public:
+    BackRefWork() {}
+    void operator()(int) const {
+        TestBlock blocks[ITERS];
+
+        for (int i=0; i<ITERS; i++) {
+            blocks[i].idx = newBackRef();
+            setBackRef(blocks[i].idx, &blocks[i].data);
+        }
+        for (int i=0; i<ITERS; i++)
+            ASSERT((Block*)&blocks[i].data == getBackRef(blocks[i].idx), NULL);
+        for (int i=ITERS-1; i>=0; i--)
+            removeBackRef(blocks[i].idx);
+    }
+};
+
+void TestBackRef() {
+    size_t beforeNumBackRef = 0, afterNumBackRef = 0;
+
+    for (int i=0; i<=backRefMaster->lastUsed; i++)
+        beforeNumBackRef += backRefMaster->backRefBl[i]->allocatedCount;
+
+    for( int p=MaxThread; p>=MinThread; --p )
+        NativeParallelFor( p, BackRefWork() );
+
+    for (int i=0; i<=backRefMaster->lastUsed; i++)
+        afterNumBackRef += backRefMaster->backRefBl[i]->allocatedCount;
+    ASSERT(beforeNumBackRef==afterNumBackRef, "backreference leak detected");
+
+    // lastUsed marks peak resource consumption. As we allocate below the mark,
+    // it must not move up, otherwise there is a resource leak.
+    int sustLastUsed = backRefMaster->lastUsed;
+    NativeParallelFor( 1, BackRefWork() );
+    ASSERT(sustLastUsed == backRefMaster->lastUsed, "backreference leak detected");
+}
+
+void TestObjectRecognition() {
+    const unsigned falseObjectSize = 113; // unsigned is the type expected by getObjectSize
+    size_t obtainedSize;
+    Block *auxBackRef;
+    LargeObjectHeader *auxLOHBackRef;
+
+    ASSERT(getObjectSize(falseObjectSize)!=falseObjectSize, "Error in test: bad choice for false object size");
+
+    void* mem = scalable_malloc(2*blockSize);
+    Block* falseBlock = (Block*)alignUp((uintptr_t)mem, blockSize);
+    falseBlock->objectSize = falseObjectSize;
+    char* falseSO = (char*)falseBlock + falseObjectSize*7;
+    ASSERT(alignDown(falseSO, blockSize)==(void*)falseBlock, "Error in test: false object offset is too big");
+
+    void* bufferLOH = scalable_malloc(2*blockSize+sizeof(LargeObjectHeader));
+    LargeObjectHeader* falseLO = 
+        (LargeObjectHeader*)alignUp((uintptr_t)bufferLOH+sizeof(LargeObjectHeader), blockSize);
+    LargeObjectHeader* headerLO = falseLO-1;
+    headerLO->unalignedSize = 2*sizeof(LargeObjectHeader);
+    headerLO->unalignedResult = headerLO;
+    ASSERT(scalable_msize(falseLO)==sizeof(LargeObjectHeader), "Error in test: LOH falsification failed");
+
+    const int NUM_OF_IDX = BR_MAX_CNT+2;
+    BackRefIdx idxs[NUM_OF_IDX];
+    for (int cnt=0; cnt<2; cnt++) {
+        for (int master = -10; master<10; master++) {
+            falseBlock->backRefIdx.s.master = (uint16_t)master;
+            headerLO->backRefIdx.s.master = (uint16_t)master;
+        
+            for (int bl = -10; bl<BR_MAX_CNT+10; bl++) {
+                falseBlock->backRefIdx.s.offset = (uint16_t)bl;
+                headerLO->backRefIdx.s.offset = (uint16_t)bl;
+                
+                obtainedSize = safer_scalable_msize(falseSO, NULL);
+                ASSERT(obtainedSize==0, "Incorrect pointer accepted");
+                obtainedSize = safer_scalable_msize(falseLO, NULL);
+                ASSERT(obtainedSize==0, "Incorrect pointer accepted");
+            }
+        }
+        if (cnt == 1) {
+            for (int i=0; i<NUM_OF_IDX; i++)
+                removeBackRef(idxs[i]);
+            break;
+        }
+        for (int i=0; i<NUM_OF_IDX; i++) {
+            idxs[i] = newBackRef();
+            setBackRef(idxs[i], NULL);
+        }
+    }
+    char *smallPtr = (char*)scalable_malloc(falseObjectSize);
+    obtainedSize = safer_scalable_msize(smallPtr, NULL);
+    ASSERT(obtainedSize==getObjectSize(falseObjectSize), "Correct pointer not accepted?");
+    scalable_free(smallPtr);
+
+    obtainedSize = safer_scalable_msize(mem, NULL);
+    ASSERT(obtainedSize>2*blockSize, "Correct pointer not accepted?");
+    scalable_free(mem);
+    scalable_free(bufferLOH);
+}
+
+
+int TestMain () {
+    // backreference requires that initialization was done
+    checkInitialization();
+     // to succeed, leak detection must be the 1st memory-intensive test
+    TestBackRef();
 
 #if MALLOC_CHECK_RECURSION
     for( int p=MaxThread; p>=MinThread; --p ) {
@@ -184,6 +289,6 @@ int main(int argc, char* argv[]) {
         NativeParallelFor( p, TestLargeObjCache() );
     }
 
-    REPORT("done\n");
-    return 0;
+    TestObjectRecognition();
+    return Harness::Done;
 }
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
index 37117c1..95022c4 100644
--- a/src/test/test_model_plugin.cpp
+++ b/src/test/test_model_plugin.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,18 @@
     the GNU General Public License.
 */
 
+#if __LRB__
+
+#ifndef _USRDLL
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+int TestMain() {
+    return Harness::Skipped;
+}
+#endif
+
+#else//__LRB__
+
 #if _WIN32 || _WIN64
 #include <windows.h>
 #else
@@ -151,10 +163,7 @@ int use_lot_of_tls() {
 
 typedef void (*PLUGIN_CALL)(int);
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
-
+int TestMain () {
     PLUGIN_CALL my_plugin_call;
 
     int tls_key_count = use_lot_of_tls();
@@ -162,7 +171,7 @@ int main(int argc, char* argv[]) {
 
     for( int i=1; i<100; ++i ) {  
 #if _WIN32 || _WIN64
-        HMODULE hLib = LoadLibrary("test_model_plugin.dll");
+        HMODULE hLib = LoadLibrary("test_model_plugin_dll.dll");
         if (hLib==NULL){
 #if !__TBB_NO_IMPLICIT_LINKAGE
             report_error_in("LoadLibrary");
@@ -179,9 +188,9 @@ int main(int argc, char* argv[]) {
         }
 #else
 #if __APPLE__
-        const char *dllname = "test_model_plugin.dylib";
+        const char *dllname = "test_model_plugin_dll.dylib";
 #else
-        const char *dllname = "test_model_plugin.so";
+        const char *dllname = "test_model_plugin_dll.so";
 #endif
         void* hLib = dlopen( dllname, RTLD_LAZY ); 
         if (hLib==NULL){
@@ -211,8 +220,8 @@ int main(int argc, char* argv[]) {
 #endif
     } // end for(1,100)
 
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
-#endif
+#endif//_USRDLL
+#endif//__LRB__
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
index 5576fc5..e963d9c 100644
--- a/src/test/test_mutex.cpp
+++ b/src/test/test_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,6 +36,7 @@
 // Compile with _OPENMP and -openmp
 //------------------------------------------------------------------------
 #include "tbb/spin_mutex.h"
+#include "tbb/critical_section.h"
 #include "tbb/spin_rw_mutex.h"
 #include "tbb/queuing_rw_mutex.h"
 #include "tbb/queuing_mutex.h"
@@ -561,11 +562,7 @@ void TestRecursiveMutexISO( const char * name ) {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char * argv[] ) {
-    // Default is to run on two threads
-    MinThread = MaxThread = 2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         tbb::task_scheduler_init init( p );
         REMARK( "testing with %d workers\n", static_cast<int>(p) );
@@ -613,6 +610,7 @@ int main( int argc, char * argv[] ) {
             TestISO<tbb::mutex>( "ISO Mutex" );
             TestISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
             TestISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
+            TestISO<tbb::critical_section>( "ISO Critical Section" );
             TestTryAcquire_OneThreadISO<tbb::spin_mutex>( "ISO Spin Mutex" );
 #if USE_PTHREAD 
             // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
@@ -620,11 +618,11 @@ int main( int argc, char * argv[] ) {
 #endif /* USE_PTHREAD */
             TestTryAcquire_OneThreadISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
             TestTryAcquire_OneThreadISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
+            TestTryAcquire_OneThreadISO<tbb::critical_section>( "ISO Critical Section" );
             TestReaderWriterLockISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
             TestRecursiveMutexISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
         }
         REMARK( "calling destructor for task_scheduler_init\n" );
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
index 8bc4301..ffda4e4 100644
--- a/src/test/test_mutex_native_threads.cpp
+++ b/src/test/test_mutex_native_threads.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -210,9 +210,7 @@ void TestReaderWriter( const char * mutex_name, int nthread ) {
     REMARK("%s readers & writers time = %g usec\n",mutex_name,(t1-t0).seconds());
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char * argv[] ) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK( "testing with %d threads\n", p );
         Test<tbb::spin_mutex>( "spin_mutex", p );
@@ -222,6 +220,5 @@ int main( int argc, char * argv[] ) {
         TestReaderWriter<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
         TestReaderWriter<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
index 9ce3d89..cac9418 100644
--- a/src/test/test_openmp.cpp
+++ b/src/test/test_openmp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -194,13 +194,11 @@ void TBB_OpenMP_Convolve( T c[], const T a[], int m, const T b[], int n ) {
 const int M = 17*17;
 const int N = 13*13;
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
+int TestMain () {
 #ifdef _PGO_INSTRUMENT
     REPORT("Warning: test_openmp.exe has problems if compiled with -prof-genx; skipping\n");
-    return 0;
+    return Harness::Skipped;
 #endif
-    ParseCommandLine(argc,argv);
     MinThread = 1;
     for( int p=MinThread; p<=MaxThread; ++p ) {
         T a[M];
@@ -230,6 +228,5 @@ int main( int argc, char* argv[] ) {
             }
         } 
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_parallel_do.cpp b/src/test/test_parallel_do.cpp
index 3b74538..42ffd53 100644
--- a/src/test/test_parallel_do.cpp
+++ b/src/test/test_parallel_do.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -217,11 +217,7 @@ void Run( int nthread ) {
     }
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    MinThread=1;
-    MaxThread=2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
@@ -235,6 +231,5 @@ int main( int argc, char* argv[] ) {
     // This check must be performed after the scheduler terminated because only in this 
     // case there is a guarantee that the workers already destroyed their last tasks. 
     ASSERT( g_values_counter == 0, "Value objects were leaked" );
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
index 6be3a23..2ffc044 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -193,13 +193,15 @@ void TestParallelForWithStepSupport()
 
     // Testing some corner cases
     tbb::parallel_for(static_cast<T>(2), static_cast<T>(1), static_cast<T>(1), TestFunctor<T>());
-#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
     try{
         tbb::parallel_for(static_cast<T>(1), static_cast<T>(100), static_cast<T>(0), TestFunctor<T>());  // should cause std::invalid_argument
     }catch(std::invalid_argument){
         return;
     }
-    ASSERT(0, "std::invalid_argument should be thrown");
+    catch ( ... ) {
+        ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception. std::invalid_argument is expected" );
+    }
 #endif
 }
 
@@ -273,14 +275,35 @@ void TestCancellation()
     RunCancellationTest<my_worker_pfor_step_task, CancellatorTask>();
 }
 
+#include "harness_m128.h"
+
+#if HAVE_m128
+ClassWithSSE Global1[N], Global2[N];
+
+struct SSE_Functor {
+    void operator()( tbb::blocked_range<int>& r ) const {
+        for( int i=r.begin(); i!=r.end(); ++i )
+            Global2[i] = Global1[i];
+    }     
+};
+
+//! Test that parallel_for works with stack-allocated __m128
+void TestSSE() {
+    for( int i=0; i<N; ++i ) {
+        Global1[i] = ClassWithSSE(i);
+        Global2[i] = ClassWithSSE();
+    }
+    tbb::parallel_for( tbb::blocked_range<int>(0,N), SSE_Functor() );
+    for( int i=0; i<N; ++i )
+        ASSERT( Global2[i]==ClassWithSSE(i), NULL ) ;
+}
+#endif /* HAVE_m128 */
+
 #include <cstdio>
 #include "tbb/task_scheduler_init.h"
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    MinThread = 1;
-    ParseCommandLine(argc,argv);
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
@@ -304,19 +327,22 @@ int main( int argc, char* argv[] ) {
             TestParallelForWithStepSupport<long long>();
             TestParallelForWithStepSupport<unsigned long long>();
             TestParallelForWithStepSupport<size_t>();
-#if !__TBB_EXCEPTION_HANDLING_BROKEN && !(__GNUC__==4 && __GNUC_MINOR__==1 && __TBB_ipf)
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
             TestExceptionsSupport();
 #endif
             if (p>1) TestCancellation();
+#if HAVE_m128
+            TestSSE();
+#endif /* HAVE_m128 */
+
             // Test that all workers sleep when no work
             TestCPUUserTime(p);
         }
     }
-#if __TBB_EXCEPTION_HANDLING_BROKEN || (__GNUC__==4 && __GNUC_MINOR__==1 && __TBB_ipf)
+#if __TBB_EXCEPTION_HANDLING_BROKEN
     REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
 #endif
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
 #if _MSC_VER
diff --git a/src/test/test_parallel_for_each.cpp b/src/test/test_parallel_for_each.cpp
index 54bf01b..8935f50 100644
--- a/src/test/test_parallel_for_each.cpp
+++ b/src/test/test_parallel_for_each.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,13 +26,22 @@
     the GNU General Public License.
 */
 
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning(disable: 4180) // "qualifier applied to function type has no meaning; ignored"
+#endif
+
 #include "tbb/parallel_for_each.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/atomic.h"
 #include "harness.h"
 #include "harness_iterator.h"
 
+// Some old compilers can't deduce template paremeter type for parallel_for_each
+// if the function name is passed without explicit cast to function pointer.
+typedef void (*TestFunctionType)(size_t);
+
 tbb::atomic<size_t> sum;
+
 // This function is called via parallel_for_each
 void TestFunction (size_t value) {
     sum += (unsigned int)value;
@@ -58,7 +67,7 @@ void RunPForEachTests()
     Iterator begin(&test_vector[0]);
     Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
 
-    tbb::parallel_for_each(begin, end, TestFunction);
+    tbb::parallel_for_each(begin, end, (TestFunctionType)TestFunction);
     ASSERT(sum == test_sum, "Not all items of test vector were processed by parallel_for_each");
     ASSERT(test_vector[NUMBER_OF_ELEMENTS] == 1000000, "parallel_for_each processed an extra element");
 }
@@ -87,7 +96,7 @@ void TestExceptionsSupport()
     Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
 
     TRY();
-        tbb::parallel_for_each(begin, end, test_function_with_exception);
+        tbb::parallel_for_each(begin, end, (TestFunctionType)test_function_with_exception);
     CATCH_AND_ASSERT();
 }
 
@@ -110,7 +119,7 @@ class my_worker_pforeach_task : public tbb::task
         Iterator begin(&test_vector[0]);
         Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
 
-        tbb::parallel_for_each(begin, end, function_to_cancel);
+        tbb::parallel_for_each(begin, end, (TestFunctionType)function_to_cancel);
         
         return NULL;
     }
@@ -128,16 +137,11 @@ void TestCancellation()
 
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    MinThread=1;
-    MaxThread=2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
     }
-
     for( int p=MinThread; p<=MaxThread; ++p ) {
         tbb::task_scheduler_init init( p );
         RunPForEachTests<Harness::RandomIterator<size_t> >();
@@ -160,6 +164,5 @@ int main( int argc, char* argv[] ) {
 #if __TBB_EXCEPTION_HANDLING_BROKEN
     REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
 #endif
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_parallel_invoke.cpp b/src/test/test_parallel_invoke.cpp
index d629508..9aa3b37 100644
--- a/src/test/test_parallel_invoke.cpp
+++ b/src/test/test_parallel_invoke.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,12 +26,22 @@
     the GNU General Public License.
 */
 
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning(disable: 4180) // "qualifier applied to function type has no meaning; ignored"
+#endif
+
 #include "tbb/parallel_invoke.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/atomic.h"
 #include "tbb/tbb_exception.h"
 #include "harness.h"
 
+#if !defined(__INTEL_COMPILER)
+#if defined(_MSC_VER) && _MSC_VER <= 1400  ||  __GNUC__==3 && __GNUC_MINOR__<=3  ||  __SUNPRO_CC
+    #define __TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN 1
+#endif
+#endif
+
 static const size_t MAX_NUMBER_OF_PINVOKE_ARGS = 10;
 tbb::atomic<size_t> function_counter;
 
@@ -45,7 +55,7 @@ tbb::atomic<size_t> function_counter;
     ASSERT(!(function_counter & (1 << value)), "Test function has already been called"); \
     function_counter += 1 << value; \
 }   \
-void (*test_pointer##value)(void) = &test##value;
+void (*test_pointer##value)(void) = test##value;
 
 TEST_FUNCTION(0)
 TEST_FUNCTION(1)
@@ -149,17 +159,21 @@ void call_parallel_invoke( size_t n, F0& f0, F1& f1, F2& f2, F3& f3, F4 &f4, F5
     }
 }
 
+#if !__TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN
+template<typename function> void aux_invoke(const function& f) {
+    f();
+}
+
+bool function_by_constref_in_template_codegen_broken() {
+    function_counter = 0;
+    aux_invoke(test1);
+    return function_counter==0;
+}
+#endif /* !__TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN */
+
 void test_parallel_invoke()
 {
     REMARK (__FUNCTION__);
-    // Testing parallel_invoke with functions
-    for (int n = 2; n <=10; n++)
-    {
-        INIT_TEST;
-        call_parallel_invoke(n, test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, NULL);
-        VALIDATE_INVOKE_RUN(n, "functions");
-    }
-    
     // Testing with pointers to functions
     for (int n = 2; n <=10; n++)
     {
@@ -177,6 +191,22 @@ void test_parallel_invoke()
             functor5, functor6, functor7, functor8, functor9, NULL);
         VALIDATE_INVOKE_RUN(n, "functors");
     }
+
+#if __TBB_FUNCTION_BY_CONSTREF_IN_TEMPLATE_BROKEN
+    // some old compilers can't cope with passing function name into parallel_invoke
+#else
+    // and some compile but generate broken code that does not call the function
+    if (function_by_constref_in_template_codegen_broken())
+        return;
+
+    // Testing parallel_invoke with functions
+    for (int n = 2; n <=10; n++)
+    {
+        INIT_TEST;
+        call_parallel_invoke(n, test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, NULL);
+        VALIDATE_INVOKE_RUN(n, "functions");
+    }
+#endif
 }
 
 // Exception handling support test
@@ -187,22 +217,24 @@ void test_parallel_invoke()
 volatile size_t exception_mask; // each bit represents whether the function should throw exception or not
 
 // throws exception if corresponding exception_mask bit is set
-#define TEST_FUNCTION_WITH_THROW(value) void test_with_throw##value () {\
-    if (exception_mask & (1 << value)){   \
-        ThrowTestException();    \
-    } \
-}
-
-TEST_FUNCTION_WITH_THROW(0)
-TEST_FUNCTION_WITH_THROW(1)
-TEST_FUNCTION_WITH_THROW(2)
-TEST_FUNCTION_WITH_THROW(3)
-TEST_FUNCTION_WITH_THROW(4)
-TEST_FUNCTION_WITH_THROW(5)
-TEST_FUNCTION_WITH_THROW(6)
-TEST_FUNCTION_WITH_THROW(7)
-TEST_FUNCTION_WITH_THROW(8)
-TEST_FUNCTION_WITH_THROW(9)
+#define TEST_FUNCTOR_WITH_THROW(value) \
+struct throwing_functor##value { \
+    void operator() () const {  \
+        if (exception_mask & (1 << value))   \
+            ThrowTestException();    \
+    }   \
+} test_with_throw##value;
+
+TEST_FUNCTOR_WITH_THROW(0)
+TEST_FUNCTOR_WITH_THROW(1)
+TEST_FUNCTOR_WITH_THROW(2)
+TEST_FUNCTOR_WITH_THROW(3)
+TEST_FUNCTOR_WITH_THROW(4)
+TEST_FUNCTOR_WITH_THROW(5)
+TEST_FUNCTOR_WITH_THROW(6)
+TEST_FUNCTOR_WITH_THROW(7)
+TEST_FUNCTOR_WITH_THROW(8)
+TEST_FUNCTOR_WITH_THROW(9)
 
 void TestExceptionHandling()
 {
@@ -270,11 +302,7 @@ void TestCancellation ()
 
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    // Set default minimum number of threads
-    MinThread = 2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     MinThread = min(MinThread, MaxThread);
     ASSERT (MinThread>=1, "Minimal number of threads must be 1 or more");
     for ( int p = MinThread; p <= MaxThread; ++p ) {
@@ -290,7 +318,5 @@ int main(int argc, char* argv[]) {
         }
         TestCPUUserTime(p);
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
-
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
index bd58deb..c29eb89 100644
--- a/src/test/test_parallel_reduce.cpp
+++ b/src/test/test_parallel_reduce.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -253,11 +253,7 @@ void ParallelSum () {
 #include "tbb/task_scheduler_init.h"
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Set default number of threads
-    MinThread = MaxThread = 2;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<0 ) {
         REPORT("Usage: nthread must be positive\n");
         exit(1);
@@ -271,6 +267,5 @@ int main( int argc, char* argv[] ) {
         // Test that all workers sleep when no work
         TestCPUUserTime(p);
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
index d93c4e0..ac9f243 100644
--- a/src/test/test_parallel_scan.cpp
+++ b/src/test/test_parallel_scan.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -249,11 +249,7 @@ static void TestScanTags() {
 #include "tbb/task_scheduler_init.h"
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    // Default is to run on two threads.
-    MinThread = MaxThread = 2;
-    ParseCommandLine(argc,argv);
+int TestMain () {
     TestScanTags();
     for( int p=MinThread; p<=MaxThread; ++p ) {
         for (int mode = 0; mode < 3; mode++) {
@@ -270,6 +266,5 @@ int main(int argc, char* argv[]) {
             ASSERT( NumberOfLiveAccumulator==0, NULL );
         }
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_parallel_sort.cpp b/src/test/test_parallel_sort.cpp
index 977de6c..ca22a00 100644
--- a/src/test/test_parallel_sort.cpp
+++ b/src/test/test_parallel_sort.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -505,9 +505,7 @@ void Flog() {
 #include <cstdio>
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine(argc,argv);
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("Usage: number of threads must be positive\n");
         exit(1);
@@ -522,7 +520,6 @@ int main( int argc, char* argv[] ) {
             TestCPUUserTime(p);
         }
     } 
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
index 62488c6..88f7997 100644
--- a/src/test/test_parallel_while.cpp
+++ b/src/test/test_parallel_while.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -161,9 +161,7 @@ static void Run( int nthread, int n ) {
 #include "tbb/task_scheduler_init.h"
 #include "harness_cpu.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
@@ -176,7 +174,6 @@ int main( int argc, char* argv[] ) {
         // Test that all workers sleep when no work
         TestCPUUserTime(p);
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_pipeline.cpp b/src/test/test_pipeline.cpp
index 1e4a652..38f7a69 100644
--- a/src/test/test_pipeline.cpp
+++ b/src/test/test_pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -291,12 +291,8 @@ void waiting_probe::probe( ) {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Default is at least one thread.
-    MinThread = 1;
+int TestMain () {
     out_of_order_count = 0;
-    ParseCommandLine(argc,argv);
     if( MinThread<1 ) {
         REPORT("must have at least one thread");
         exit(1);
@@ -320,6 +316,5 @@ int main( int argc, char* argv[] ) {
     }
     if( !out_of_order_count )
         REPORT("Warning: out of order serial filter received tokens in order\n");
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_pipeline_with_tbf.cpp b/src/test/test_pipeline_with_tbf.cpp
index ff256c3..903d451 100644
--- a/src/test/test_pipeline_with_tbf.cpp
+++ b/src/test/test_pipeline_with_tbf.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -356,12 +356,8 @@ void waiting_probe::probe( ) {
 
 #include "tbb/task_scheduler_init.h"
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Default is at least one thread.
-    MinThread = 1;
+int TestMain () {
     out_of_order_count = 0;
-    ParseCommandLine(argc,argv);
     if( MinThread<1 ) {
         REPORT("must have at least one thread");
         exit(1);
@@ -384,6 +380,5 @@ int main( int argc, char* argv[] ) {
     }
     if( !out_of_order_count )
         REPORT("Warning: out of order serial filter received tokens in order\n");
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_rwm_upgrade_downgrade.cpp b/src/test/test_rwm_upgrade_downgrade.cpp
index 06f6a44..7a8582b 100644
--- a/src/test/test_rwm_upgrade_downgrade.cpp
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -67,15 +67,12 @@ struct Hammer: NoAssign {
 queuing_rw_mutex QRW_mutex;
 spin_rw_mutex SRW_mutex;
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
+int TestMain () {
     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) );
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp
index 67b5673..42ca1f0 100644
--- a/src/test/test_task.cpp
+++ b/src/test/test_task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -655,10 +655,7 @@ void TestDispatchLoopResponsiveness() {
     // The success criteria of this test is not hanging
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    MinThread = 1;
-    ParseCommandLine( argc, argv );
+int TestMain () {
 #if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
     TestUnconstructibleTask<1>();
     TestUnconstructibleTask<10000>();
@@ -677,7 +674,6 @@ int main(int argc, char* argv[]) {
         TestStealLimit( p );
         TestRelaxedOwnership( p );
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 
diff --git a/src/test/test_task_assertions.cpp b/src/test/test_task_assertions.cpp
index b13c1f1..22bfd41 100644
--- a/src/test/test_task_assertions.cpp
+++ b/src/test/test_task_assertions.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -83,13 +83,11 @@ void TestTaskAssertions() {
 #endif /* TBB_USE_ASSERT */
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
-    REPORT("skip\n");
+int TestMain () {
+#if __TBB_EXCEPTION_HANDLING_BROKEN || __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    return Harness::Skipped;
 #else
     TestTaskAssertions();
-    REPORT("done\n");
+    return Harness::Done;
 #endif
-    return 0;
 }
diff --git a/src/test/test_task_auto_init.cpp b/src/test/test_task_auto_init.cpp
index ccd52f1..461eda9 100644
--- a/src/test/test_task_auto_init.cpp
+++ b/src/test/test_task_auto_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -127,29 +127,39 @@ void UseAFewNewTlsKeys () {
 
 using tbb::internal::spin_wait_until_eq;
 
-volatile bool FafRunning   = false,
-              FafCanFinish = false;
+volatile bool FafStarted   = false,
+              FafCanFinish = false,
+              FafCompleted = false;
 
 //! This task is supposed to be executed during termination of an auto-initialized master thread 
 class FireAndForgetTask : public tbb::task {
     tbb::task* execute () {
         // Let another master thread proceed requesting new TLS keys
-        FafRunning = true;
+        FafStarted = true;
         UseAFewNewTlsKeys();
         // Wait while another master thread dirtied its new TLS slots
         spin_wait_until_eq( FafCanFinish, true );
-        FafRunning = false;
+        FafCompleted = true;
         return NULL;
     }
+public: // to make gcc 3.2.3 happy
+    ~FireAndForgetTask() {
+        ASSERT(FafCompleted, "FireAndForgetTask got erroneously cancelled?");
+    }
 };
 
+#include "harness_barrier.h"
+Harness::SpinBarrier driver_barrier(2);
+
 struct DriverThreadBody : NoAssign, Harness::NoAfterlife {
     void operator() ( int id ) const {
         ASSERT( id < 2, "Only two test driver threads are expected" );
+        // a barrier is required to ensure both threads started; otherwise the test may deadlock:
+        // the first thread would execute FireAndForgetTask at shutdown and wait for FafCanFinish,
+        // while the second thread wouldn't even start waiting for the loader lock hold by the first one.
         if ( id == 0 ) {
+            driver_barrier.wait();
             // Prepare global data
-            tbb::task_group_context ctx;
-            g_Ctx = &ctx;
             g_Root1 = new( tbb::task::allocate_root() ) tbb::empty_task;
             g_Root2 = new( tbb::task::allocate_root() ) tbb::empty_task;
             g_Root3 = new( tbb::task::allocate_root() ) tbb::empty_task;
@@ -157,30 +167,30 @@ struct DriverThreadBody : NoAssign, Harness::NoAfterlife {
             g_Root3->set_ref_count(2);
             // Run tests
             NativeParallelFor( NumTestFuncs, TestThreadBody() );
-            ASSERT( g_NumTestsExecuted == NumTestFuncs, "Test diver: Wrong number of tests executed" );
+            ASSERT( g_NumTestsExecuted == NumTestFuncs, "Test driver: Wrong number of tests executed" );
 
             // This test checks the validity of temporarily restoring the value of 
             // the last TLS slot for a given key during the termination of an 
             // auto-initialized master thread (in Governor::auto_terminate). 
             // If anything goes wrong, GenericScheduler::cleanup_master() will assert.
-            tbb::task &r = *new( tbb::task::allocate_root() ) FireAndForgetTask;
+            // The context for this task must be valid till the task completion.
+            tbb::task &r = *new( tbb::task::allocate_root(*g_Ctx) ) FireAndForgetTask;
             r.spawn(r);
         }
         else {
-            spin_wait_until_eq( FafRunning, true );
+            tbb::task_group_context ctx;
+            g_Ctx = &ctx;
+            driver_barrier.wait();
+            spin_wait_until_eq( FafStarted, true );
             UseAFewNewTlsKeys();
             FafCanFinish = true;
-            spin_wait_until_eq( FafRunning, false );
+            spin_wait_until_eq( FafCompleted, true );
         }
     }
 };
 
-__TBB_TEST_EXPORT
-int main() {
+int TestMain () {
     // Do not use any TBB functionality in the main thread!
-
     NativeParallelFor( 2, DriverThreadBody() );
-    
-	REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_task_group.cpp b/src/test/test_task_group.cpp
index 63f057e..3fb6d87 100644
--- a/src/test/test_task_group.cpp
+++ b/src/test/test_task_group.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,7 +35,7 @@
 #endif
 
 #if !TBBTEST_USE_TBB
-    #if _MSC_VER < 1600
+    #if defined(_MSC_VER) && _MSC_VER < 1600
         #ifdef TBBTEST_USE_TBB
             #undef TBBTEST_USE_TBB
         #endif
@@ -56,7 +56,9 @@
 
 #else /* !TBBTEST_USE_TBB */
 
+    #if defined(_MSC_VER)
     #pragma warning(disable: 4100 4180)
+    #endif
 
     #include <ppl.h>
 
@@ -321,9 +323,11 @@ void TestFib2 () {
     FIB_TEST_PROLOGUE();
     g_Sum = 0; 
     Concurrency::task_group rg;
-    for( unsigned i = 0; i < numRepeats; ++i )
+    for( unsigned i = 0; i < numRepeats - 1; ++i )
         rg.run( &RunFib2 );
     rg.wait();
+    rg.run( &RunFib2 );
+    rg.wait();
     FIB_TEST_EPILOGUE(g_Sum);
 }
 
@@ -363,7 +367,7 @@ uint_t RunFib3 ( uint_t n ) {
     return res;
 }
 
-void TestFib3 () {
+void TestTaskHandle () {
     FIB_TEST_PROLOGUE();
     uint_t sum = 0; 
     for( unsigned i = 0; i < numRepeats; ++i )
@@ -410,7 +414,7 @@ void RunFib4 () {
 }
 
 template<class task_group_type>
-void TestFib4 () {
+void TestTaskHandle2 () {
     FIB_TEST_PROLOGUE();
     g_Sum = 0; 
     task_group_type rg;
@@ -427,6 +431,20 @@ void TestFib4 () {
         if ( i == numRepeats - 1 )
             break;
         rg.run( *h );
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+        bool caught = false;
+        try {
+            rg.run( *h );
+        }
+        catch ( Concurrency::invalid_multiple_scheduling& e ) {
+            ASSERT( e.what(), "Error message is absent" );
+            caught = true;
+        }
+        catch ( ... ) {
+            ASSERT ( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unrecognized exception" );
+        }
+        ASSERT ( caught, "Expected invalid_multiple_scheduling exception is missing" );
+#endif /* !__TBB_EXCEPTION_HANDLING_BROKEN */
     }
     rg.run_and_wait( *h );
     for( unsigned i = 0; i < numRepeats; ++i )
@@ -439,7 +457,7 @@ void TestFib4 () {
     FIB_TEST_EPILOGUE(g_Sum);
 }
 
-#if __TBB_LAMBDAS_PRESENT 
+#if __TBB_LAMBDAS_PRESENT
 //------------------------------------------------------------------------
 // Test for a mixed tree of task groups.
 // The chores are specified as lambdas
@@ -464,15 +482,14 @@ void TestFibWithLambdas () {
 
 void TestFibWithMakeTask () {
     REMARK ("Make_task test");
-    FIB_TEST_PROLOGUE();
     atomic_t sum;
     sum = 0;
     Concurrency::task_group rg;
-    for( unsigned i = 0; i < numRepeats; ++i ) {
-      rg.run( Concurrency::make_task( [&](){sum += Fib_SpawnBothChildren(N);} ) );
-    }
-    rg.wait();
-    FIB_TEST_EPILOGUE(sum);
+    const auto &h1 = Concurrency::make_task( [&](){sum += Fib_SpawnBothChildren(N);} );
+    const auto &h2 = Concurrency::make_task( [&](){sum += Fib_SpawnBothChildren(N);} );
+    rg.run( h1 );
+    rg.run_and_wait( h2 );
+    ASSERT( sum == 2 * F, NULL );
 }
 #endif /* __TBB_LAMBDAS_PRESENT */
 
@@ -487,11 +504,6 @@ class test_exception : public std::exception
 public:
     test_exception ( const char* descr ) : m_strDescription(descr) {}
 
-    test_exception& operator= ( const test_exception& src ) {
-        m_strDescription = src.m_strDescription;
-        return *this;
-    }
-
     const char* what() const throw() { return m_strDescription; }
 };
 
@@ -529,7 +541,7 @@ bool g_Throw;
                 ASSERT( false, "Unknown exception" );       \
         }
 #else
-    #define CATCH_ANY()  catch ( ... ) { ASSERT( false, "Unknown exception" ); }
+    #define CATCH_ANY()  catch ( ... ) { ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN, "Unknown exception" ); }
 #endif
 
 inline
@@ -576,7 +588,7 @@ void LaunchChildren () {
         status = g.wait();
     } catch ( TestException& e ) {
         ASSERT( e.what(), "Empty what() string" );
-        ASSERT( strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
+        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
         exceptionCaught = true;
         ++g_ExceptionCount;
     } CATCH_ANY();
@@ -615,7 +627,7 @@ void TestEh2 () {
         rg.wait();
     } catch ( TestException& e ) {
         ASSERT( e.what(), "Empty what() string" );
-        ASSERT( strcmp(e.what(), EXCEPTION_DESCR2) == 0, "Unknown exception" );
+        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR2) == 0, "Unknown exception" );
         ASSERT ( !rg.is_canceling(), "wait() has not reset cancellation state" );
         exceptionCaught = true;
     } CATCH_ANY();
@@ -672,7 +684,7 @@ void StructuredLaunchChildren () {
         g.wait();
     } catch ( TestException& e ) {
         ASSERT( e.what(), "Empty what() string" );
-        ASSERT( strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
+        ASSERT( __TBB_EXCEPTION_TYPE_INFO_BROKEN || strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
 #if __TBB_SILENT_CANCELLATION_BROKEN
         ASSERT ( !g.is_canceling() || g_CancellationPropagationInProgress, "wait() has not reset cancellation state" );
 #else
@@ -748,7 +760,8 @@ void TestStructuredCancellation2 () {
         if ( Throw )
             throw int(); // Initiate stack unwinding
     }
-    catch ( const Concurrency::missing_wait& ) {
+    catch ( const Concurrency::missing_wait& e ) {
+        ASSERT( e.what(), "Error message is absent" );
         exception_occurred = true;
         unexpected_exception = Throw;
     }
@@ -759,13 +772,11 @@ void TestStructuredCancellation2 () {
     catch ( ... ) {
         exception_occurred = unexpected_exception = true;
     }
-    __TBB_ASSERT( exception_occurred, NULL );
-    __TBB_ASSERT( !unexpected_exception, NULL );
+    ASSERT( exception_occurred, NULL );
+    ASSERT( !unexpected_exception, NULL );
     driver.Finish();
 }
 
-#include "harness_bad_expr.h"
-
 void EmptyFunction () {}
 
 void TestStructuredWait () {
@@ -773,17 +784,12 @@ void TestStructuredWait () {
     handle_type h(EmptyFunction);
     sg.run(h);
     sg.wait();
-#if TBB_USE_ASSERT
-    tbb::set_assertion_handler( AssertionFailureHandler );
-    TRY_BAD_EXPR( sg.wait(), "wait()" );
-    tbb::set_assertion_handler( NULL );
-#endif /* TBB_USE_ASSERT */
+    handle_type h2(EmptyFunction);
+    sg.run(h2);
+    sg.wait();
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    MinThread = 1;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     REMARK ("Testing %s task_group functionality\n", TBBTEST_USE_TBB ? "TBB" : "PPL");
     for( int p=MinThread; p<=MaxThread; ++p ) {
         g_MaxConcurrency = p;
@@ -806,9 +812,9 @@ int main(int argc, char* argv[]) {
         }
         TestFib1();
         TestFib2();
-        TestFib3();
-        TestFib4<Concurrency::task_group>();
-        TestFib4<Concurrency::structured_task_group>();
+        TestTaskHandle();
+        TestTaskHandle2<Concurrency::task_group>();
+        TestTaskHandle2<Concurrency::structured_task_group>();
 #if __TBB_LAMBDAS_PRESENT
         TestFibWithLambdas();
         TestFibWithMakeTask();
@@ -829,6 +835,5 @@ int main(int argc, char* argv[]) {
 #if __TBB_EXCEPTION_HANDLING_BROKEN
     REPORT("Warning: Exception handling tests are skipped because of a known issue.\n");
 #endif
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
index 994c0c4..a24c542 100644
--- a/src/test/test_task_leaks.cpp
+++ b/src/test/test_task_leaks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,7 +46,10 @@ tbb::atomic<tbb::task*> Exchanger;
 tbb::internal::scheduler* Producer;
 
 #include "tbb/task_scheduler_init.h"
+
+#define HARNESS_DEFAULT_MIN_THREADS -1
 #include "harness.h"
+
 using namespace tbb;
 using namespace tbb::internal;
 
@@ -191,17 +194,12 @@ void TestTaskReclamation() {
     }
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    MinThread = -1;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     if( !GetMemoryUsage() ) {
         REMARK("GetMemoryUsage is not implemented for this platform\n");
-        REPORT("skip\n");
-    } else {
-        TestTaskReclamation();
-        REPORT("done\n");
+        return Harness::Skipped;
     }
-    return 0;
+    TestTaskReclamation();
+    return Harness::Done;
 }
 
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
index ee622b7..4879a45 100644
--- a/src/test/test_task_scheduler_init.cpp
+++ b/src/test/test_task_scheduler_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -113,8 +113,7 @@ void AssertExplicitInitIsNotSupplanted () {
             "Manual init provided more threads than requested. See also the comment at the beginning of main()." );
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
+int TestMain () {
     // Do not use tbb::task_scheduler_init directly in the scope of main's body,
     // as a static variable, or as a member of a static variable.
 #if _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE
@@ -127,9 +126,6 @@ int main(int argc, char* argv[]) {
     #endif
 #endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE */
     std::srand(2);
-    // Set defaults
-    MaxThread = MinThread = 2;
-    ParseCommandLine( argc, argv );
     try {
         InitializeAndTerminate(MaxThread);
     } catch( std::runtime_error& error ) {
@@ -140,6 +136,5 @@ int main(int argc, char* argv[]) {
         NativeParallelFor( p, ThreadedInit() );
     }
     AssertExplicitInitIsNotSupplanted();
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_task_scheduler_observer.cpp b/src/test/test_task_scheduler_observer.cpp
index 2d51184..ed7069f 100644
--- a/src/test/test_task_scheduler_observer.cpp
+++ b/src/test/test_task_scheduler_observer.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -104,12 +104,12 @@ public:
     void operator()( int i ) const {
         LocalState->IsMaster = true;
         if( i==0 ) {   
-            tbb::task_scheduler_init(nthread);
+            tbb::task_scheduler_init init(nthread);
             DoFib(0);
         } else {
             FlagType f = i<=MaxFlagIndex? 1<<i : 0;
             MyObserver w(f);
-            tbb::task_scheduler_init(nthread);
+            tbb::task_scheduler_init init(nthread);
             DoFib(f);
         }
     }
@@ -119,15 +119,11 @@ void TestObserver( int p, int q ) {
     NativeParallelFor( p, DoTest(q) );
 }
 
-__TBB_TEST_EXPORT
-int main(int argc, char* argv[]) {
-    ParseCommandLine( argc, argv );
-
+int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) 
         for( int q=MinThread; q<=MaxThread; ++q ) 
             TestObserver(p,q);
     ASSERT( EntryCount>0, "on_scheduler_entry not exercised" );
     ASSERT( ExitCount>0, "on_scheduler_exit not exercised" );
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_tbb_header.cpp b/src/test/test_tbb_header.cpp
index c004b34..a827e81 100644
--- a/src/test/test_tbb_header.cpp
+++ b/src/test/test_tbb_header.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,7 +37,7 @@
 
 static volatile size_t g_sink;
 
-#define TestTypeDefinitionPresence( Type) g_sink = sizeof(tbb::Type);
+#define TestTypeDefinitionPresence( Type ) g_sink = sizeof(tbb::Type);
 #define TestTypeDefinitionPresence2(TypeStart, TypeEnd) g_sink = sizeof(tbb::TypeStart,TypeEnd);
 #define TestFuncDefinitionPresence(Fn, Args, ReturnType) { ReturnType (*pfn)Args = &tbb::Fn; (void)pfn; }
 
@@ -47,6 +47,12 @@ struct Body {
 struct Body1 {
     void operator() ( int ) const {}
 };
+struct Body1a {
+    int operator() ( const tbb::blocked_range<int>&, const int ) const { return 0; }
+};
+struct Body1b {
+    int operator() ( const int, const int ) const { return 0; }
+};
 struct Body2 {
     Body2 () {}
     Body2 ( const Body2&, tbb::split ) {}
@@ -66,12 +72,11 @@ struct Body3 {
 /* This mode is used to produce secondary object file that should be linked with
    main object file in order to detect "multiple definition" linker error.
 */
-int secondary(int /*argc*/, char* /*argv*/[])
+void secondary()
 #else
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness.h"
-__TBB_TEST_EXPORT
-int main(int /*argc*/, char* /*argv*/[])
+int TestMain ()
 #endif
 {
     TestTypeDefinitionPresence2(aligned_space<int, 1> );
@@ -92,17 +97,20 @@ int main(int /*argc*/, char* /*argv*/[])
     TestTypeDefinitionPresence( recursive_mutex );
     TestTypeDefinitionPresence( spin_mutex );
     TestTypeDefinitionPresence( spin_rw_mutex );
+    TestTypeDefinitionPresence( critical_section );
     TestTypeDefinitionPresence( tbb_exception );
     TestTypeDefinitionPresence( captured_exception );
     TestTypeDefinitionPresence( movable_exception<int> );
 #if !TBB_USE_CAPTURED_EXCEPTION
-    TestTypeDefinitionPresence( tbb_exception_ptr );
+    TestTypeDefinitionPresence( internal::tbb_exception_ptr );
 #endif /* !TBB_USE_CAPTURED_EXCEPTION */
     TestTypeDefinitionPresence( blocked_range3d<int> );
-    TestFuncDefinitionPresence( parallel_invoke, (Body&, Body&), void );
+    TestFuncDefinitionPresence( parallel_invoke, (const Body&, const Body&), void );
     TestFuncDefinitionPresence( parallel_do, (int*, int*, const Body1&), void );
-    TestFuncDefinitionPresence( parallel_for_each, (int*, int*, Body1), Body1 );
+    TestFuncDefinitionPresence( parallel_for_each, (int*, int*, const Body1&), void );
+    TestFuncDefinitionPresence( parallel_for, (int, int, int, const Body1&), void );
     TestFuncDefinitionPresence( parallel_for, (const tbb::blocked_range<int>&, const Body2&, const tbb::simple_partitioner&), void );
+    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, const int&, const Body1a&, const Body1b&, const tbb::auto_partitioner&), int );
     TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, Body2&, tbb::affinity_partitioner&), void );
     TestFuncDefinitionPresence( parallel_scan, (const tbb::blocked_range2d<int>&, Body3&, const tbb::auto_partitioner&), void );
     TestFuncDefinitionPresence( parallel_sort, (int*, int*), void );
@@ -120,7 +128,6 @@ int main(int /*argc*/, char* /*argv*/[])
     TestTypeDefinitionPresence( zero_allocator<int> );
     TestTypeDefinitionPresence( tick_count );
 #if !__TBB_TEST_SECONDARY
-    REPORT("done\n");
+    return Harness::Done;
 #endif
-    return 0;
 }
diff --git a/src/test/test_tbb_thread.cpp b/src/test/test_tbb_thread.cpp
index 84cbb8d..19aa089 100644
--- a/src/test/test_tbb_thread.cpp
+++ b/src/test/test_tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,7 @@
 #include "tbb/tbb_thread.h"
 #include "tbb/atomic.h"
 
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness_report.h"
 #include "harness_assert.h"
 
@@ -202,6 +203,12 @@ void RunTests() {
     ASSERT( thr2.native_handle() == h1, NULL );
     ASSERT( thr1.get_id() == id2, NULL );
     ASSERT( thr2.get_id() == id1, NULL );
+    thr1.swap(thr2);
+    ASSERT( thr1.native_handle() == h1, NULL );
+    ASSERT( thr2.native_handle() == h2, NULL );
+    ASSERT( thr1.get_id() == id1, NULL );
+    ASSERT( thr2.get_id() == id2, NULL );
+    thr1.swap(thr2);
 
     tbb::move(thrs[1], thr1);
     ASSERT( thr1.get_id() == id, NULL );
@@ -271,13 +278,10 @@ id_relation CheckSignatures() {
     return r[1];
 }
 
-#define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness.h"
 
-__TBB_TEST_EXPORT
-int main( int , char *[] ) {
+int TestMain () {
     CheckSignatures();
     RunTests();
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_tbb_version.cpp b/src/test/test_tbb_version.cpp
index 7484361..835c393 100644
--- a/src/test/test_tbb_version.cpp
+++ b/src/test/test_tbb_version.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,8 +32,11 @@
 #include <string>
 #include <utility>
 
-#define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "tbb/task_scheduler_init.h"
+
+#define HARNESS_CUSTOM_MAIN 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#define HARNESS_NO_MAIN_ARGS 0
 #include "harness.h"
 
 #if defined (_WIN32) || defined (_WIN64)
@@ -197,7 +200,7 @@ int main(int argc, char*[] ) {
 void initialize_strings_vector(std::vector <string_pair>* vector)
 {
     vector->push_back(string_pair("TBB: VERSION\t\t2.2", required));          // check TBB_VERSION
-    vector->push_back(string_pair("TBB: INTERFACE VERSION\t4001", required)); // check TBB_INTERFACE_VERSION
+    vector->push_back(string_pair("TBB: INTERFACE VERSION\t4003", required)); // check TBB_INTERFACE_VERSION
     vector->push_back(string_pair("TBB: BUILD_DATE", required));
     vector->push_back(string_pair("TBB: BUILD_HOST", required));
     vector->push_back(string_pair("TBB: BUILD_OS", required));
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
index 3538cbc..c4360a0 100644
--- a/src/test/test_tick_count.cpp
+++ b/src/test/test_tick_count.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -133,10 +133,7 @@ void TestTickCountDifference( int n ) {
     }
 }
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[]) {
-    ParseCommandLine(argc, argv);
-
+int TestMain () {
     tbb::tick_count t0 = tbb::tick_count::now();
     TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0,    /*tolerance=*/2E-6);
     tbb::tick_count t1 = tbb::tick_count::now();
@@ -147,6 +144,5 @@ int main( int argc, char* argv[]) {
     for( int n=MinThread; n<=MaxThread; ++n ) {
         TestTickCountDifference(n);
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
diff --git a/src/test/test_user_events.cpp b/src/test/test_user_events.cpp
index 48bc5e4..3ea44ea 100644
--- a/src/test/test_user_events.cpp
+++ b/src/test/test_user_events.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -200,11 +200,10 @@ void Test()
 }  // namespace internal
 }  // namespace tbb
 
-__TBB_TEST_EXPORT
-int main() {
-    tbb::internal::Test();
-    REPORT("done\n");
-}
-
 #define HARNESS_NO_PARSE_COMMAND_LINE 1
 #include "harness.h"
+
+int TestMain () {
+    tbb::internal::Test();
+    return Harness::Done;
+}
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
index 2b9761d..301e485 100644
--- a/src/test/test_yield.cpp
+++ b/src/test/test_yield.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,18 +61,13 @@ struct RoundRobin: NoAssign {
     }
 };
 
-__TBB_TEST_EXPORT
-int main( int argc, char* argv[] ) {
-    // Set defaults
-    MaxThread = MinThread = 3;
-    ParseCommandLine( argc, argv );
+int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK("testing with %d threads\n", p );
         CyclicCounter = 0;
         Quit = false;
         NativeParallelFor( long(p), RoundRobin(p) );
     }
-    REPORT("done\n");
-    return 0;
+    return Harness::Done;
 }
 

-- 
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